Java 如何允许函数参数采用各种对象类型?
我希望能够将任何对象传递给Java 如何允许函数参数采用各种对象类型?,java,Java,我希望能够将任何对象传递给searchO方法,例如td1.searchO(“akash”)或td1.searchO(1)。它应该接受所有对象,因为对象类是所有对象的超类 我该怎么做 public boolean searchO(String o ) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{ Statement st=null; Conne
searchO
方法,例如td1.searchO(“akash”)
或td1.searchO(1)
。它应该接受所有对象,因为对象类是所有对象的超类
我该怎么做
public boolean searchO(String o ) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{
Statement st=null;
Connection con=test1.getConnection();
st=con.createStatement();
ResultSet rs=st.executeQuery("select * from `student` where `fname` = '" + o + "' ;");
//System.out.println("full name is "+rs.getString("lname")+" "+rs.getString("fname"));
if(rs.next()==true){
System.out.println("full name is "+rs.getString("lname")+" "+rs.getString("fname"));
return true;
}
else{
return false;
}
}
那你为什么不把它定义为:
public boolean searchO(Object o) {
并将此行修改为使用o.toString()
而不是o
:
ResultSet rs = st.executeQuery("select * from `student` where `fname` = '" + o.toString() + "' ;");
您只需确保传入的内容都会为
toString()
方法返回所需的值。那么为什么不将其定义为:
public boolean searchO(Object o) {
并将此行修改为使用o.toString()
而不是o
:
ResultSet rs = st.executeQuery("select * from `student` where `fname` = '" + o.toString() + "' ;");
您只需确保传入的任何内容都会为
toString()
方法返回所需的值。因为您将使用参数作为字符串过滤器(假设fname
是一个带有varchar/text类型的db列),而将类型保留为string更可取
您可能会认为将参数类型更改为public boolean searchO(Object o)
并调用o.toString()
会起到作用,但如果以后在传递类型时没有正确的toString()
实现,则只会引入错误
在Java中,类型转换/从/到字符串的转换并不难
// From integer to string
int i = 10;
String s = i + "";
// From string to integer
String s = "10";
int i = Integer.parseInt(s);
如果您有一个自定义类,只需重写它的toString()
方法,并在传递到searchO()
方法之前调用它
public class MyClass {
//...
@Override
public String toString() {
return //...
}
}
// Somewhere else in your code
MyClass c = // fetch a MyClass instance..
searchO(c.toString());
由于您将使用自变量作为字符串过滤器(假设
fname
是一个具有varchar/text类型的db列),因此将该类型保留为字符串更为可取
您可能会认为将参数类型更改为public boolean searchO(Object o)
并调用o.toString()
会起到作用,但如果以后在传递类型时没有正确的toString()
实现,则只会引入错误
在Java中,类型转换/从/到字符串的转换并不难
// From integer to string
int i = 10;
String s = i + "";
// From string to integer
String s = "10";
int i = Integer.parseInt(s);
如果您有一个自定义类,只需重写它的toString()
方法,并在传递到searchO()
方法之前调用它
public class MyClass {
//...
@Override
public String toString() {
return //...
}
}
// Somewhere else in your code
MyClass c = // fetch a MyClass instance..
searchO(c.toString());
您可能对使用重载感兴趣 您将有两种方法
public boolean searchO(int o ) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{
return searchO(String.valueOf(o));
}
public boolean searchO(String o ) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{
//same no changes as in your original code
}
安全注意:您的SQL查询易受SQL注入攻击。要避免这种威胁,请使用。请记住,永远不要将变量的值连接到任何查询字符串。您可能对使用重载感兴趣 您将有两种方法
public boolean searchO(int o ) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{
return searchO(String.valueOf(o));
}
public boolean searchO(String o ) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{
//same no changes as in your original code
}
安全注意:您的SQL查询易受SQL注入攻击。要避免这种威胁,请使用。记住,永远不要将变量的值连接到任何查询字符串。重载不起作用?重载不起作用?哦,是的,+1表示重载,+1表示SQL注入。请不要使用依赖于
toString()
的代码哦,是的,+1表示重载,+1表示SQL注入。请不要使用依赖于toString()的代码