2

次のクラス階層があります。

public abstract class Property<T>
{
    private long id;
    private String name;
    private T value;

    /*setters and getters*/
}

public class NumberProperty extends Property<Integer>

public class TextProperty extends Property<String>

...およびを含むクラスList<Property> properties。「Property is raw type. References to generic type Property<T> should be parametrized」が表示されます。理由はわかりますが、いくつかの既知のタイプのプロパティのリストを1つ作成したいと思います(プロパティは抽象クラスであるため、インスタンス化できません)。

私の質問は、警告を無視できますか、それともコードを変更する必要がありますか(方法は?)

4

3 に答える 3

6

Property<?>オブジェクトのタイプを気にしない場合に使用します。これにより、コンパイラに、実行していることを認識していることが通知されます。

List<Property<?>> list;
于 2012-08-02T13:06:50.997 に答える
1

Javaのコレクションは同種であるため、さまざまなタイプの値をコレクションに入れるのはエラーです。Property<Integer>は階層的に関連していないことに注意してくださいProperty<String>。これらは2つの異なる型であり、Java型システムは、一部のプロパティが文字列と一部の整数であるリストを表すことができません。あなたの唯一の選択肢は、型の安全性を失うことです。

于 2012-08-02T13:08:36.090 に答える
1

これは警告なので、いつでも無視することができます;)。

警告は、あなたが持っているとき、あなたはクラスでList<Property>何が来るのかわからないことをあなたに知らせます。よくわからない場合は、何でもできることを示すために使用できます。<T>PropertyList<Property<?>>

このトピックの詳細については、Oracleのジェネリックスチュートリアルを参照してください。

于 2012-08-02T13:09:45.240 に答える