Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.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 列表<;整数>;无法转换为ArrayList<;整数>;_Java_List_Typeconverter - Fatal编程技术网

Java 列表<;整数>;无法转换为ArrayList<;整数>;

Java 列表<;整数>;无法转换为ArrayList<;整数>;,java,list,typeconverter,Java,List,Typeconverter,在我的代码开头,有: List<List<Integer>> result = new ArrayList(); List result=new ArrayList(); 然后,(这里是反转子列表): List sub=new ArrayList(); re=反向(result.get(j));//这里发生错误 有这样一种方法: public ArrayList<Integer> reverse(ArrayList<Integer> list

在我的代码开头,有:

List<List<Integer>> result = new ArrayList();
List result=new ArrayList();
然后,(这里是反转子列表):

List sub=new ArrayList();
re=反向(result.get(j));//这里发生错误
有这样一种方法:

public ArrayList<Integer> reverse(ArrayList<Integer> list) {
    List<Integer> newList = new ArrayList<>();

    for(int i=list.size()-1; i>=0; i--) {
        newList.add(list.get(i));}
        return newList;
    }
}
公共ArrayList反向(ArrayList列表){
List newList=newarraylist();
对于(int i=list.size()-1;i>=0;i--){
newList.add(list.get(i));}
返回newList;
}
}
错误消息是:

无法将列表转换为ArrayList


为什么?

您正在使用
列表
接口的特定实现作为
反向
函数的返回类型(即
数组列表
)。这将强制您返回一个
数组列表
,但您将其定义为
列表

要理解,请尝试将构造部分更改为使用
链接列表
,该列表也实现了
列表

List<Integer> newList = new LinkedList<Integer>();
更好,通过更改函数的返回类型(可以插入任何
列表
),使实现更通用:

公共列表反向(列表){

这是因为您的结果变量有一种列表类型,但您的方法需要一个ArrayList 尝试以下方法:

List<ArrayList<Integer> result = new ArrayList<>();

List这样想,您有一个名为
re
水果(我使用这个名称是因为它是您正在使用的变量的名称)

您有一个方法
reverse
,其输入类型为
Apple

public Apple reverse(Apple a) {
    // ...
}
我们有一个变量
re
,我们称之为
水果
,这意味着它总是某种
水果
,可能是
苹果
,但可能是
橙色
——甚至是
香蕉

当您尝试将
结果
赋予采用
Apple
的方法时,编译器会阻止您,因为它无法确定它是100%的
Apple
。例如

Fruit re = new Orange();
reverse(re);
哎呀!可以说,我们是在把一个方形的钉子插进一个圆孔。
反向
取的是
苹果
,而不是
橙色
。坏事可能会发生

旁注:那么为什么可以将
Apple
分配给声明为
水果的东西呢?(
reverse
返回一个
Apple
水果f=reverse(re);
是合法的。)因为
Apple
水果
。如果它被声明为更具体的
Apple
,并且返回类型是更通用的
水果
,那么这里就有一个问题。(如果
反向
返回的
水果
苹果a=反向(re)
将是非法的。)

如果您没有遵循隐喻,请用
List
替换
Fruit
,用
ArrayList
替换
Apple
,然后再次阅读上述内容。
List
Fruit
,一种描述抽象概念的一般方式。
ArrayList
Apple
,abs的具体实现tract idea.(
LinkedList
也可以是
Orange

一般来说,您希望将事物声明为获得所需功能的最通用的事物。进行以下更改应该可以解决您的问题

public List<Integer> reverse(List<Integer> list) {
公共列表反向(列表){

我们正在获取某种类型的
List
of
Integer
s,并返回某种类型的
List
of
Integer
s.

如何声明
re
呢?请记住
List
不是
ArrayList
,但恰恰相反。List是接口,ArrayList是实现的类之一设置列表接口。因此,任何ArrayList都是List(即ArrayList可以隐式分配给List),但反之亦然。将返回类型更改为List,或将newList变量类型更改为ArrayList。顺便说一下,将“return”移出循环体。不要使用原始类型
ArrayList
。使用
新建ArrayList();
而不是
新的ArrayList();
。哦,好的。我明白了。非常感谢!我喜欢你可爱的例子!好的。明白了。谢谢你简单明了的回答!非常感谢!非常有用!
public List<Integer> reverse(List<Integer> list){...
Fruit re;
public Apple reverse(Apple a) {
    // ...
}
Fruit re = new Orange();
reverse(re);
public List<Integer> reverse(List<Integer> list) {