Java 实例化参数化类

Java 实例化参数化类,java,generics,parameterized-constructor,Java,Generics,Parameterized Constructor,只是想知道这样做是否正确。我想构造参数化类的实例,其中一个实例变量是泛型类型。下面的代码可以工作,但我在主方法“SomeObject是原始类型。对泛型类型SomeObject的引用应该参数化”中得到了很多警告 公共类SomeObject{ 私有字符串描述; 私人T值; 公共SomeObject(字符串描述,T值){ this.description=描述; 这个值=值; } 公共静态void main(字符串参数[]){ List objectList=new ArrayList(); add(

只是想知道这样做是否正确。我想构造参数化类的实例,其中一个实例变量是泛型类型。下面的代码可以工作,但我在主方法“SomeObject是原始类型。对泛型类型SomeObject的引用应该参数化”中得到了很多警告

公共类SomeObject{
私有字符串描述;
私人T值;
公共SomeObject(字符串描述,T值){
this.description=描述;
这个值=值;
}
公共静态void main(字符串参数[]){
List objectList=new ArrayList();
add(newsomeobject(“object1:,true));
add(newsomeobject(“object2:”,888.00));
添加(新的SomeObject(“对象3:,“另一个对象”);
add(newsomeobject(“object4:,'4'));
对于(SomeObject对象:objectList){
System.out.println(object.getDescription()+object.getValue());
}
}
}

下面的代码可以工作,但是我在main方法中得到了很多警告 “对象是原始类型。对泛型类型对象的引用应为 参数化”

警告是因为在构造
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'));
列表
下面的代码可以工作,但是我在main方法中得到了很多警告
“对象是原始类型。对泛型类型对象的引用应为
参数化”

警告是因为在构造
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'));

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

您还需要为
列表的
SomeObject
部分提供一个类型参数。这里我使用了一个通配符,这意味着列表可以保存任何类型的
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) {
    ...;
}
List>();
add(newsomeobject(“object1:,true));
add(newsomeobject(“object2:”,888.00));
添加(新的SomeObject(“对象3:,“另一个对象”);
add(newsomeobject(“object4:,'4'));
对于(SomeObject对象:objectList){
...;
}

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

您还需要为
列表的
SomeObject
部分提供一个类型参数。这里我使用了一个通配符,这意味着列表可以保存任何类型的
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) {
    ...;
}
List>();
add(newsomeobject(“object1:,true));
add(newsomeobject(“object2:”,888.00));
添加(新的SomeObject(“对象3:,“另一个对象”);
add(newsomeobject(“object4:,'4'));
对于(SomeObject对象:objectList){
...;
}

您不了解错误的哪一部分?您应该实际使用泛型。它应该是
new SomeObject()
而不是
new Object()
?尝试像对arraylist所做的那样参数化对象创建“它应该是new SomeObject()而不是new Object()?”应该是。我编辑了它。谢谢。请注意:在Java7和更高版本中,您通常可以省略第二组尖括号中的类型,并让它被推断出来。它被称为菱形操作符。你不明白错误的哪一部分?您应该实际使用泛型。它应该是
new SomeObject()
而不是
new Object()
?尝试像对arraylist所做的那样参数化对象创建“它应该是new SomeObject()而不是new Object()?”应该是。我编辑了它。谢谢。请注意:在Java7和更高版本中,您通常可以省略第二组尖括号中的类型,并让它被推断出来。它被称为菱形运算符。您可以添加类型为的objectList声明来完成您的回答吗?@RC。当然可以。你能用类型添加objectList声明来完成你的回答吗?@RC。当然可以