如何允许函数参数采用各种对象类型?

时间:2013-07-02 10:54:57

标签: java

我希望能够将任何对象传递给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;
    }
}

3 个答案:

答案 0 :(得分:2)

您可能对使用重载感兴趣。

您将有两种方法。

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注入攻击。要避免此威胁,请使用PreparedStatement。请记住,永远不要将变量的值连接到任何查询字符串。

答案 1 :(得分:1)

由于您将使用参数作为字符串过滤器(假设fname是具有varchar / text类型的db列),因此将类型保留为String更为可取

您可能会考虑将参数类型更改为public boolean searchO(Object o ),并且调用o.toString()将会解决这个问题,但是如果稍后您在通过没有正确toString()类型的类型的情况下会引入错误实施

类型转换/从/到String的转换在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());

答案 2 :(得分:0)

那你为什么不把它定义为:

public boolean searchO(Object o) {

并修改此行以使用o.toString()代替o

ResultSet rs = st.executeQuery("select * from `student` where `fname` = '" + o.toString() + "' ;");

您只需要确保传入的内容为toString()方法返回所需的值。