[解決済み] [Solved] Collections.emptyList() returns a List<Object>?
Question
I'm having some trouble navigating Java's rule for inferring generic type parameters. Consider the following class, which has an optional list parameter:
import java.util.Collections;
import java.util.List;
public class Person {
private String name;
private List<String> nicknames;
public Person(String name) {
this(name, Collections.emptyList());
}
public Person(String name, List<String> nicknames) {
this.name = name;
this.nicknames = nicknames;
}
}
My Java compiler gives the following error:
Person.java:9: The constructor Person(String, List<Object>) is undefined
But
Collections.emptyList()
returns type
<T> List<T>
, not
List<Object>
. Adding a cast doesn't help
public Person(String name) {
this(name,(List<String>)Collections.emptyList());
}
イールド
Person.java:9: inconvertible types
使用方法
EMPTY_LIST
の代わりに
emptyList()
public Person(String name) {
this(name, Collections.EMPTY_LIST);
}
イールド
Person.java:9: warning: [unchecked] unchecked conversion
一方、以下のように変更すると、エラーは解消されます。
public Person(String name) {
this.name = name;
this.nicknames = Collections.emptyList();
}
どなたか、ここで私が直面している型チェックのルールと、それを回避する最善の方法を説明していただけませんか?この例では、最終的なコード例は満足のいくものですが、より大きなクラスでは、コードを重複させることなく、この "オプションのパラメータ" パターンに従ってメソッドを記述できるようにしたいのです。
追加クレジット:どのような場合に
EMPTY_LIST
とは対照的に
emptyList()
?
解決方法は?
あなたが遭遇している問題は、メソッドであるにもかかわらず
emptyList()
は
List<T>
を返すようにデフォルト設定されています。
List<Object>
. このように、typeパラメータを指定することで、期待通りの動作をさせることができます。
public Person(String name) {
this(name,Collections.<String>emptyList());
}
さて、まっすぐな代入を行う場合、コンパイラは一般的な型パラメータを把握することができます。 これを型推論という。 たとえば、次のような場合だ。
public Person(String name) {
List<String> emptyList = Collections.emptyList();
this(name, emptyList);
}
とすると
emptyList()
を呼び出すと、正しく
List<String>
.
関連
-
[解決済み] トークンのシンタックスエラー、これらのトークンを削除してください [closed].
-
[解決済み] getContentPane()は具体的に何をするのですか?
-
[解決済み] java.io.IOException。DER長の短い読み取り
-
[解決済み] List<T>をオブジェクトのプロパティでソートする方法
-
[解決済み] Javaで配列をリストに変換する
-
[解決済み] Java 8 List<V> を Map<K, V> に変換する。
-
[解決済み] List<Dog> は List<Animal> のサブクラスですか?Java のジェネリックはなぜ暗黙のうちに多相性にならないのですか?
-
[解決済み] C#で汎用リストをクローンする方法は?
-
[解決済み] GsonでList<T>オブジェクトをデシリアライズする?
-
[解決済み】Collections.emptyList()とnewインスタンスの比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ストリングビルダー.イコール Java
-
[解決済み] Oracle DB : java.sql.SQLException: 閉じた接続
-
[解決済み] Java UnknownFormatConversionException
-
[解決済み] javac ソースファイルが見つかりません
-
[解決済み] JOGLまたはLWJGLの既成のプロジェクト
-
[解決済み] raw 型のメンバへのアンチェックの呼び出し
-
[解決済み] 1行目2列目でBEGIN_ARRAYを期待したが、BEGIN_OBJECTだった。
-
[解決済み] HTTP ステータス 500 - サーブレットクラス pkg.coreServlet のインスタンス化に失敗しました。
-
[解決済み] Mavenです。JARは空になります - 含有するためにマークされたコンテンツがありません
-
[解決済み] java swingアプリケーションでJCEがプロバイダBCを認証できない