2017-04-25 12 views
1

これが正しい方法であるかどうか疑問です。インスタンス変数の1つがジェネリック型である、パラメータ化されたクラスのインスタンスを構築したいと思います。以下のコードは動作しますが、メインメソッド "SomeObjectは生の型です"という警告が多く表示されます。一般的な型のSomeObjectへの参照はパラメータ化する必要があります。パラメータ化されたクラスのインスタンス化

public class SomeObject<T> { 

    private String description; 

    private T value; 


    public SomeObject(String description, T value) { 
     this.description = description; 
     this.value = value; 
    } 



public static void main(String args[]){ 

    List <SomeObject> objectList = new ArrayList<SomeObject>(); 

    objectList.add(new SomeObject("Object 1: ", true)); 
    objectList.add(new SomeObject("Object 2: ", 888.00)); 
    objectList.add(new SomeObject("Object 3: ", "another object")); 
    objectList.add(new SomeObject("Object 4: ", '4')); 

    for (SomeObject object : objectList){ 
    System.out.println(object.getDescription() + object.getValue()); 
    } 
} 

}

+1

どの部分エラーのあなたは理解していないのですか?あなたは実際にジェネリックを使用すべきです。 – SLaks

+1

は 'new Object()'の代わりに 'SomeObject()'でなければなりませんか? – Flurin

+1

arraylist –

答えて

4

作品次のコードが、私は、mainメソッド内の警告の多くを得る 「オブジェクトは、生タイプです。ジェネリック型オブジェクトへの参照がパラメータ でなければなりません」。

警告は、SomeObjectを構築するときに型引数を指定しなかったためです。すなわち、

それは次のようになります。

List<SomeObject<?>> objectList = new ArrayList<>(); 
objectList.add(new SomeObject<Boolean>("Object 1: ", true)); 
objectList.add(new SomeObject<Double>("Object 2: ", 888.00)); 
objectList.add(new SomeObject<String>("Object 3: ", "another object")); 
objectList.add(new SomeObject<Character>("Object 4: ", '4')); 
+0

あなたの答えを完成させるために、objectListの宣言を型で追加できますか? @RC。 –

+0

確実なこと。 –

+1

これは受け入れられる回答でなければなりません –

2

あなたはraw typeと呼ばれる型引数(角括弧内の部分)、なしSomeObjectを持っている、そしてそれはSomeObjectの消去を使用するのと同じだとき。 (基本的に、消去はそれが非ジェネリックであることを意味します)

また、ListSomeObject部分にタイプ引数を指定する必要があります。ここで私は、リストがSomeObjectの任意の型を保持することができますが、我々はリストにしてSomeObjectを入れた後、我々は、元の型引数はもう何であったかを知っていないことを意味するワイルドカードを使用しました:

List<SomeObject<?>> objectList = new ArrayList<SomeObject<?>>(); 

objectList.add(new SomeObject<Boolean>("Object 1: ", true)); 
objectList.add(new SomeObject<Double>("Object 2: ", 888.00)); 
objectList.add(new SomeObject<String>("Object 3: ", "another object")); 
objectList.add(new SomeObject<Character>("Object 4: ", '4')); 

for (SomeObject<?> object : objectList) { 
    ...; 
} 
関連する問題