代码之家  ›  专栏  ›  技术社区  ›  rs79

如何解释Java函数的未知返回类型

  •  2
  • rs79  · 技术社区  · 15 年前

    下面的代码检索字符串…我需要将其更改为返回整数类型,最好不用编写其他函数。

    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;
    }
    
    4 回复  |  直到 15 年前
        1
  •  5
  •   zigdon    15 年前

    方法可能是一种更好的方法,但是您可以始终让函数返回 Object -这就必须被投入到你真正期望得到的任何东西中。

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

    (另一方面,为运行的每个查询重新连接到数据库似乎是个坏主意。)

        2
  •  5
  •   Colin Hebert    15 年前

    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();
    

    另一种方法是使用泛型方法,这种方法可以调用 getItem()

    public static <T> T getItem(){
        return (T) myObject;
    }
    
    String lol = MyClass.<String>getItem();
    Integer test = MyClass.<Integer>getItem();
    

    你也可以回来 Object (如果您不设置泛型,上面的方法将像这样工作)并稍后在应用程序中强制转换它。

    public static Object getItem(){
        return myObject;
    }
    
    String lol = (String) MyClass.getItem();
    Integer test = (Integer) MyClass.getItem();
    
        3
  •  2
  •   Zak    15 年前

    public static Connection dbConnect() throws SQLException, ClassNotFoundException {
    
        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);
        return conn;
    
    }
    

    public String execute(String sql,String field, Connection conn)
    {
        Statement stmt;
            stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery(sql);
        String result=null;
        while(rs.next()){
                result  = rs.getString(field);
        }
        rs.close();
        stmt.close();
        return result;
    }
    

    如果需要,让调用代码将字符串转换为int

    Connection conn = MyClass.dbConnect();
    result = mything.execute(someSql, field, conn);
    Integer i = Integer.pareseInt(result);
    
        4
  •  1
  •   Barry    15 年前

    一个粗略的解决方案是返回一个对象,而不是字符串或字符串整数。稍后可以将其类型转换为字符串或整数(使用if语句并使用instanceOf())