Java 实例化参数化类
只是想知道这样做是否正确。我想构造参数化类的实例,其中一个实例变量是泛型类型。下面的代码可以工作,但我在主方法“SomeObject是原始类型。对泛型类型SomeObject的引用应该参数化”中得到了很多警告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{
私有字符串描述;
私人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。当然可以