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”。我知道为什么,但我想列出几个已知类型的属性(属性不能被实例化,因为它是抽象类)。

我的问题是:我可以忽略警告还是应该更改我的代码(如何?)?

4

3 回答 3

6

Property<?>如果您不关心它是哪种类型的对象,请使用这将指示编译器您知道自己在做什么。

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

由于这是一个警告,您可以随时选择忽略它;)。

警告通知您,当您拥有 时List<Property>,您不知道课堂<T>上的Property。如果你不确定,你可以用List<Property<?>>来表示任何事情都会做。

请参阅 Oracles泛型教程以了解有关此主题的更多信息。

于 2012-08-02T13:09:45.240 回答
1

Java 中的集合是同质的,因此将不同类型的值放入其中是错误的。请注意,这Property<Integer>与层次无关Property<String>——这是两种不同的类型,Java 类型系统将无法表示您的列表,其中一些属性是字符串和一些整数。您唯一的选择是失去类型安全性。

于 2012-08-02T13:08:36.090 回答