繁体   English   中英

抽象泛型类的集合,原始类型警告

[英]Collection of abstract generic class, raw type warning

我有以下类层次结构:

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 ”。 我知道为什么,但是我想拥有少数几种已知类型的属性列表(不能将属性归为抽象类)。

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

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

List<Property<?>> list;

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

由于这是一个警告,因此您始终可以选择忽略它;)。

该警告通知您,当拥有List<Property> ,您不知道Property类中<T>含义。 如果不确定,则可以使用List<Property<?>>表示可以进行任何操作。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM