2017-03-06 5 views
0

を示して、私は次のように定義された機能を持っています)は、このように定義されています渡す方法の参照はエラー

int getInt(int columnIndex) 

私のコンパイラは、パラメータResultSet::getIntのエラーを以下の私を示しています。 静的コンテキストから非静的メソッドを参照することはできません

ここで間違っていますか?

+5

'getInt'を呼び出すための' ResultSet'オブジェクトはどこにありますか? –

+0

良い質問ですが、私はこれについて考えていません。ありがとう – sfandler

+0

変数 'ResultSet rs'がある場合は、メソッド参照の最後のパラメータとしてメソッド参照' rs :: getInt'を使用できます。 – Misha

答えて

0

ResultSet::getIntは静的メソッドへの参照ですが、メソッドはインスタンスメソッドです。これはエラーです。

public static <T> T readSingleValue(MyTransaction t, String s, T alternativeVal, Function<ResultSet, T> rsGetter) 

と、それは、データベースから複数の列から構成することができ、所望の物体にResultSetをマッピングすることができますので、機能Function<ResultSet, T> rsGetterがより強力である

readSingleValue(transaction, "select count(0) from users", 0, rs -> rs.getInt(1)); 

それを呼び出す:別のオプションがある可能性があります。例えば、あなたが持つことができる

readSingleValue(transaction, "select * from users where user_id = 1", null, 
     rs -> { 
      User u = new User(); 
      u.setId(rs.getInt(1)); 
      u.setName(rs.getString(2)); 
      ... 
      return u; 
     }); 
+0

'rs :: getInt'を使うだけです。 – NoDataFound

+0

'resultSet'はメソッド' readSingleValue'の中で作成されたと思います。なぜなら、彼はメソッドにsql文字列を渡すからです。 resultSetを既に持っている場合、SQLを渡すのはなぜですか? – AlexCV

関連する問題