Java 在列表中添加元素<&燃气轮机;
我创造了这个:Java 在列表中添加元素<&燃气轮机;,java,generics,collections,Java,Generics,Collections,我创造了这个: List<?> result = new ArrayList<>(); Java编译器告诉我们: 类型列表中的add(capture#9-of?)方法不适用于参数(字符串) 有什么想法吗?如何解决此问题?如果有列表,则null是您可以添加的唯一参考。因此,这应该是可行的: List<?> result = new ArrayList<>(); result.add(null); 原因是编译器无法完全确定您尝试添加的引用是否与
List<?> result = new ArrayList<>();
Java编译器告诉我们:
类型列表中的add(capture#9-of?)方法不适用于参数(字符串)
有什么想法吗?如何解决此问题?如果有列表
,则null
是您可以添加的唯一参考。因此,这应该是可行的:
List<?> result = new ArrayList<>();
result.add(null);
原因是编译器无法完全确定您尝试添加的引用是否与编译时的未知通配符(?
)类型匹配
为了允许将字符串
引用添加到列表
,应将其定义为:
List<String> result = new ArrayList<>();
result.add("");
List result=new ArrayList();
结果:添加(“”);
如果有列表
,则null
是您可以添加的唯一参考。因此,这应该是可行的:
List<?> result = new ArrayList<>();
result.add(null);
原因是编译器无法完全确定您尝试添加的引用是否与编译时的未知通配符(?
)类型匹配
为了允许将字符串
引用添加到列表
,应将其定义为:
List<String> result = new ArrayList<>();
result.add("");
List result=new ArrayList();
结果:添加(“”);
它被称为通配符类型。您可以执行以下操作:
List<SomeClass> result = new ArrayList<>();
public static void main(String[] args) {
List<String> result = new ArrayList<String>();
result.add("");
}
List result=new ArrayList();
某些类可以是字符串
或另一个
它被称为通配符
类型。您可以执行以下操作:
List<SomeClass> result = new ArrayList<>();
public static void main(String[] args) {
List<String> result = new ArrayList<String>();
result.add("");
}
List result=new ArrayList();
SomeClass可以是String
或另一个需要定义泛型类型,例如,当您想添加“”(String)时,您可以这样做:
List<SomeClass> result = new ArrayList<>();
public static void main(String[] args) {
List<String> result = new ArrayList<String>();
result.add("");
}
publicstaticvoidmain(字符串[]args){
列表结果=新建ArrayList();
结果:添加(“”);
}
需要定义泛型类型,例如,当您想要添加“”(字符串)时,您可以这样做:
List<SomeClass> result = new ArrayList<>();
public static void main(String[] args) {
List<String> result = new ArrayList<String>();
result.add("");
}
publicstaticvoidmain(字符串[]args){
列表结果=新建ArrayList();
结果:添加(“”);
}
需要注意的是,List
和List
是不同的。您可以将对象或对象的任何子类型插入列表
。但是您只能在列表中插入null
使用通配符(?)指定,例如,List
。这称为未知类型的列表。有两种情况下,无界通配符是一种有用的方法:
- 如果您正在编写一个可以使用对象类中提供的功能实现的方法
- 当代码在泛型类中使用不依赖于类型参数的方法时。例如,
List.size
或List.clear
。事实上,Class
经常被使用,因为Class
中的大多数方法都不依赖于T
考虑以下方法,printList
:
public static void printList(List<Object> list) {
for (Object elem : list)
System.out.println(elem + " ");
System.out.println();
}
因为对于任何具体类型的A,List需要注意的是List
和List
是不同的。您可以将对象或对象的任何子类型插入列表
。但是您只能在列表中插入null
使用通配符(?)指定,例如,List
。这称为未知类型的列表。有两种情况下,无界通配符是一种有用的方法:
- 如果您正在编写一个可以使用对象类中提供的功能实现的方法
- 当代码在泛型类中使用不依赖于类型参数的方法时。例如,
List.size
或List.clear
。事实上,Class
经常被使用,因为Class
中的大多数方法都不依赖于T
考虑以下方法,printList
:
public static void printList(List<Object> list) {
for (Object elem : list)
System.out.println(elem + " ");
System.out.println();
}
因为对于任何具体类型的A,List如果对象仅在将值输入列表时已知,则可以使用下面给定的代码
public <T> void feedList(T value)
{
List<T> genericList = new ArrayList<T>();
genericList.add(value);
}
feedList("test");
public void feedList(T值)
{
List genericList=新建ArrayList();
一般列表。添加(值);
}
反馈列表(“测试”);
如果对象仅在将值输入列表时已知,则可以使用下面给定的代码
public <T> void feedList(T value)
{
List<T> genericList = new ArrayList<T>();
genericList.add(value);
}
feedList("test");
public void feedList(T值)
{
List genericList=新建ArrayList();
一般列表。添加(值);
}
反馈列表(“测试”);
如果添加字符串
,为什么不将列表
声明为列表
?泛型用于编译类型安全检查。您想要什么类型的列表?只要使用合适的类型来解决它。如果要在其中添加所有类型的对象,只需将其更改为列表
,如果添加字符串
,为什么不将列表
声明为列表
?泛型用于编译类型安全检查。您想要什么类型的列表?只要使用合适的类型来解决它。如果要在其中添加所有类型的对象,只需将其更改为List
问题:List result=new ArrayList()之间的区别是什么代码>和列表结果=新建ArrayList()代码>?据我所知,作业右侧sied上的
不需要在那里,但它是否有区别?新的ArrayList()
在Java7之后受支持。这是对编译器特性(称为类型推断)的改进,该特性用于自动检测类型参数(String
),而不是要求您显式提供它。查看更多信息。啊,谢谢。因此,除了更短之外,它没有任何区别?是的,引入此功能背后的动机很简单,因为Java被批评过于冗长。:)问题:List result=new ArrayList()之间有什么区别代码>和列表结果=新建ArrayList()代码>?正如我所理解的