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()的代码