class GenMethDemo {
static <T, V extends T> boolean isIn(T x, V[] y) {
for (int i = 0; i < y.length; i++)
if (x.equals(y[i]))
return true;
return false;
}
/*when compiled in java 7 it producing an error and compiling in java 8 without error */
public static void main(String args[]) {
Integer nums[] = {1, 2, 3, 4, 5};
String s[] = {"one", "two", "three"};
System.out.println(isIn("fs", nums));
/*
when compiled in java 7 it producing an error and compiling in java 8 without error */
}
}
0
A
答えて
1
これは、Java 8の一般化されたターゲット型の推論の改善によるものです。実際、私は先週のような質問に答えました。 Java 8 call to generic method is ambiguous
質問Java 8: Reference to [method] is ambiguousの最初の回答も非常に良いです。
Java 8では、汎用メソッドに引き渡される引数の型を推論できます。 @Thomasがコメントしたように、タイプT
はObject
であると推定され、V
はObject
というオブジェクトであると推定されます(Integer
)。 Java 7では、Integer
は明らかにString
を拡張しないので、これはちょうどエラーを投げます。
0
Java 7では、T = String
とV = Integer
は、V extends T
を満たしません。
ただし、これが機能することをJavaの8つの状態のJLS:あなたのケースではこのように
List<Number> ln = Arrays.asList(1, 2.0);
これはT = V = Object
に解決されるだろう。
関連する問題
- 1. タイプの不一致。 found:Long required:Int
- 2. タイプの不一致 - JavaScript
- 3. Fortran90引数のタイプ/ランクの不一致
- 4. PHPソープサーバとのタイプの不一致
- 5. doブロックのHaskellタイプの不一致
- 6. 「関連タイプの不一致」?クリップ
- 7. Jenaとjspの不一致タイプ
- 8. タイプ型の不一致:ここ
- 9. タイプ不一致エラーコード13以外
- 10. 汎用タイプの汎用リストの作成
- 11. オプションの汎用タイプ
- 12. jbossでの例外のデプロイ:引数タイプの不一致
- 13. レプリケーションの不一致
- 14. インスタンスの不一致
- 15. シグネチャの不一致
- 16. スカラリフトタイプの不一致?
- 17. DirectXデモのF#タイプの不一致問題
- 18. スレッド「JavaFX Application Thread」の例外java.lang.IllegalArgumentException:引数タイプの不一致
- 19. Int vs Integer:タイプの不一致、見つかった:Int、required:String
- 20. スカラ:タイプの不一致。 found:ユニットが必要です:ブール
- 21. デフォルトにint * int型部門とタイプ制約の不一致
- 22. VBAタイプの不一致、実行時エラー13
- 23. テンプレートテンプレート引数タイプ/値の不一致エラーここ
- 24. TSQLラウンド()不一致?
- 25. nHibernateコンポジットキークラスタイプ不一致
- 26. XSLT - 不一致タグ
- 27. 型不一致エラー
- 28. 不一致削除
- 29. 汎用タイプのASP.NET MVCモデルバインダー
- 30. ジェネリックコレクションのロード汎用タイプ
質問を編集して問題を説明する*テキスト*を表示してください。特に、Java 7ではどのようなエラーが発生しますか? –
'isIn(" fs "、nums)'は動作しません。その場合、 'T'は' String'、 'V'は' String'を拡張しない 'Integer'です。しかし、Java 8の型推論は、 'T = Object'と' V = Object'と一致するものを見つけることをより寛大にするかもしれません。 – Thomas