实例化参数化类

问题描述:

只是想知道这是否是正确的做法。我想构造我的参数化类的实例,其中一个实例变量是一个泛型类型。下面的代码工作,但我在主要方法中得到了很多警告“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 SomeObject()'而不是'new Object()'吗? – Flurin

+1

尝试参数化对象创建,就像你为arraylist所做的那样 –

以下作品中的代码,但我得到的主要方法有很多警告 “对象是原始类型。引用泛型类型对象应该是 参数”。

警告是因为您在构建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的声明以完成答案? – 2017-04-25 15:38:58

+0

@RC。肯定的事情。 –

+1

这应该是公认的答案 –

当你有一个SomeObject没有一个类型参数(在方括号中的部分),这被称为raw type,它是与使用的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) { 
    ...; 
}