web-dev-qa-db-ja.com

型変数Tのインスタンスは存在しないため、List <T>はIntegerに準拠します

次のコードでは:

_return new HashSet<>(namedParameterJdbcTemplate.query(
    SOME_SQL_QUERY_STRING,
    parametersMap,
    (resultSet, rowNum) -> resultSet.getBigDecimal("GETID")
));
_

_(resultSet, rowNum) -> resultSet.getBigDecimal("GETID"))_の下に赤い線が表示され、次のエラーが発生します:No instance(s) of type variable(s) T exist so that List<T> conforms to Integer。誰かが私を助けて、なぜこれが起こっているのか教えてもらえますか?

8
cnova

基本的な問題は、「クエリ」メソッドの別の(不要な)オーバーロードされたバージョンが(コードに基づいて)推論され、第3パラメータとして指定されたラムダ(関数)がこのバージョンの「クエリ」に適切でないことです。

これを修正する方法は、次のようなtypeパラメーターを提供することで、必要なクエリ関数を「強制」することです。

return new HashSet<>(namedParameterJdbcTemplate.<BigDecimal>query( ...
4
Ovidiu Dolha

メソッド呼び出しに明示的なキャストを追加します

私の場合、私は持っています

<T> Map<String, T> getMap(@NotNull String rootPath, @NotNull Class<T> type)

そして私はそれを次のように使用しました

LinkedHashMap<String,String> x = xmlRegestryFile.getMap("path/to/map/of/string", String.class)

しかし、失敗してそのエラーが出たので、キャストを追加してこのエラーを克服しました

x = (LinkedHashMap<String, String>) xmlRegestryFile.getMap("my/path", String.class)
0