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());
    }
}

}

4

2 回答 2

4

下面的代码有效,但我在主方法中收到很多警告“对象是原始类型。对泛型类型对象的引用应该被参数化”。

警告是因为您在构造SomeObject. IE。

它应该是:

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'));
于 2017-04-25T15:38:13.667 回答
2

当你有一个SomeObject没有类型参数(方括号中的部分)时,这被称为原始类型,它与使用擦除相同SomeObject。(基本上,擦除意味着它是非通用的。)

您还需要SomeObjectList. 这里我使用了通配符,这意味着列表可以包含任何类型的SomeObject,但是一旦我们将 aSomeObject放入列表中,我们就不再知道它们的原始类型参数是什么了:

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) {
    ...;
}
于 2017-04-25T15:40:23.670 回答