如何计算Java函数的未知返回类型

rs7*_*s79 2 java mysql

我有一个返回查询结果的函数。输入参数是SQL语句和要检索的字段,而输出是查询的结果。如预期的那样,数据库包含多种数据类型。我可以指定要具有的泛型返回类型吗?

下面的代码检索字符串...我需要更改它以返回Integer类型,最好不编写其他函数。

public static String dbConnect(String sql,String field) throws SQLException, ClassNotFoundException {
    Statement stmt;
    String DB_URL;
    Class.forName("com.mysql.jdbc.Driver");
    DB_URL="jdbc:mysql://connectionURL.net:3306/db?autoReconnect=true"; 
    Connection conn =DriverManager.getConnection(DB_URL,DB_USER, DB_PWD);
        stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery(sql);
    String result=null;
    while(rs.next()){
            result  = rs.getString(field);
    }
    rs.close();
    stmt.close();
    conn.close();
    return result;
}
Run Code Online (Sandbox Code Playgroud)

zig*_*don 5

这样做可能是更好的方法,但是您始终可以让函数返回一个Object-然后必须将其强制转换为您实际希望获得的任何值。

但是,如果这样做,可能对您期望的各种数据类型使用多种方法可能会更容易。

(顺便说一句,对于您运行的每个查询,重新连接到数据库似乎是个坏主意。)


Col*_*ert 5

最好的方法可能是使用两个不同的方法来调用相同的“基本”方法。

public static ObjectThatCanGetItemAsAnything getItemGenerator(){
    return objectThatCanGetItemAsAnything;
} 

public static String getItemAsString(){
    return getItemGenerator().getStringValue();
}

public static String getItemAsInteger(){
    return getItemGenerator().getIntegerValue();
}

String lol = MyClass.getItemAsString();
Integer test = MyClass.getItemAsInteger();
Run Code Online (Sandbox Code Playgroud)

另一种方法是拥有泛型方法,这种方法可以调用getItem(),并将返回所需的Type。

public static <T> T getItem(){
    return (T) myObject;
}

String lol = MyClass.<String>getItem();
Integer test = MyClass.<Integer>getItem();
Run Code Online (Sandbox Code Playgroud)

您还可以返回Object(如果不设置泛型,上述方法将像这样)并稍后在应用程序中进行转换。

public static Object getItem(){
    return myObject;
}

String lol = (String) MyClass.getItem();
Integer test = (Integer) MyClass.getItem();
Run Code Online (Sandbox Code Playgroud)