Javaでは、変数を宣言することとの違いはSet
とSet<Object>
ですか? 2人は同等ではないでしょうか? Set<Object>
変数をSet
に代入すると、コンパイル時エラーが発生するのはなぜですか?Javaジェネリック:セットとセット<Object>
1
A
答えて
1
いいえ:Set<>
は一般的であり、Set
はありません。論理的には、Set<Object>
は(暗黙のうちに、Set of Object
)Set
と同等のかもしれませんが、バイトコードはかなり異なっている:)
提案:
実行javap
あなたのサンプルプログラムのコマンドと自分のためにこれを確認。
1
Java 1.4以降と1.5以上の違い。
理由については十分な情報があります。コンパイル時のエラーではありません
http://download.oracle.com/javase/1,5.0/docs/guide/language/generics.html
3
。それは単なる警告です。これは罰金コンパイルすなわち:
Set s = new HashSet();
Set<Object> so = new HashSet<Object>();
s = so;
そしてついでにを、そう
so = s;
をして、彼らは基本的に、使用の観点から、同じです。
0
2つは同等ではありません。 Set<Object>
を割り当てると、実行時に失敗するであろうセットの安全でない操作を検出するコンパイラの能力が向上します。
これは、ジョシュ・ブロッホの優れたEffective Java, Second Edition、この例では、臆面もなく触発されたからで覆われている:インクルードが等しくないのはここ
public static void main(String[] args) {
List<String> typesafeStrings = new ArrayList<String>();
unsafeAdd(typesafeStrings, new Integer(0)); // can add a Integer to a List<String>!
String s = typesafeStrings.get(0); // fails at runtime, not safe
typesafeStrings = new ArrayList<String>();
safeAdd(typesafeStrings, new Integer(0)); // compiler error, safe!
s = typesafeStrings.get(0);
}
static void unsafeAdd(List list, Object o) {
list.add(o);
}
static void safeAdd(List<Object> list, Object o) {
list.add(o);
}
2
がある...
Set<String> s_str = new HashSet<String>();
Set s_plain = s_str; // This is valid, although you will get a compiler warning
// This is invalid, the Set<String> cannot be implicitly cast to object even though
// it's *contents* are all objects.
Set<Object> s_obj = s_str;
は、今度は、あなたが望んでいたとしましょう関数への引数として、例えば汎用Setを取らなければなりません。あなたは使用することができます。この場合、
function void foo(Set<? extends Object> s) {}
を拡張し、Set
、Set<Object>
とSet<String>
はすべて、それらはすべて異なっていても、関数に渡すことができます。
関連する問題
- 1. Javaジェネリックとセットのセット
- 2. Java:セットからの列挙<String>
- 3. BrowserSyncライブリロード<baseurl>とセット
- 4. Java - セットをソートする方法<Entry<K,V>>?
- 5. セット内のタイプをソートする(セット<MyType>)
- 6. セット(セットの...)Pythonで
- 7. sigprocmask()内のセットと古いセット
- 8. aerospike:庫内セットとセットなしの差
- 9. ソート済みセットとの混乱Java
- 10. Java原子変数セット()とcompareAndSet()
- 11. javaポルトガル語の文字セット
- 12. JavaストリームCollectors.toMapの値がセット
- 13. readAllLines Javaの文字セット
- 14. JavaでのArraylistsのセット
- 15. デフォルトの文字セット - Javaの
- 16. TWSzのJava APIセット期間
- 17. セットを判別ツールチップ(Java)の
- 18. Javaエラーは、文字セット
- 19. セット/
- 20. セット
- 21. セット
- 22. セット
- 23. 2セットのアイテム。</p> <p>セットAとセットB すべての要素:の各要素は、質問を明確にするために、そう
- 24. XML行セットとMsXML2
- 25. セットとxmemory in C++
- 26. 3セットvennguerとダイアグラム
- 27. ポイントとベクトルフィールドのセット
- 28. Javaジェネリックスメソッド宣言の<K,V>または<T>のセット
- 29. リストをセットにするときのリストとセットの違い
- 30. F#ランダムな要素のセット<string>
質問を修正する必要があります – marc