Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在列表中添加元素<&燃气轮机;_Java_Generics_Collections - Fatal编程技术网

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()?正如我所理解的