我有一个返回查询结果的函数。输入参数是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)
这样做可能是更好的方法,但是您始终可以让函数返回一个Object-然后必须将其强制转换为您实际希望获得的任何值。
但是,如果这样做,可能对您期望的各种数据类型使用多种方法可能会更容易。
(顺便说一句,对于您运行的每个查询,重新连接到数据库似乎是个坏主意。)
最好的方法可能是使用两个不同的方法来调用相同的“基本”方法。
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)