这是我的代码:
import java.util.Collections;
import java.util.*;
public class ListMerge<String> extends LinkedList<String>
{
public LinkedList<String> mergeLists(LinkedList<String> one, LinkedList<String> two)
{
LinkedList<String> newList = new LinkedList<String>();
newList.addAll(one);
newList.addAll(two);
newList = Collections.sort(newList);
return newList;
}
}
我收到错误“找不到符号 - 方法排序(java.util.LinkedList),我完全不知道为什么它不起作用。我已经导入了集合类并在内联编码中我打电话给Collections,所以我不确定为什么它似乎找不到这个方法。
我是编码的初学者,所以我的编码词汇量不是太强,所以请容纳!
谢谢!
答案 0 :(得分:3)
注意返回类型:void sort(List<T> list)
,它会对给定的列表进行排序。
编译器需要具有签名LinkedList<String> sort(List<T> list)
的方法,该方法在Collections
类中不存在。
这一行是非法的:
newList = Collections.sort(newList);
你可以轻松解决这个问题:
Collections.sort(newList);
答案 1 :(得分:0)
如果您打算扩展LinkedList,则必须扩展泛型类“LinkedList ...您不能扩展具有指定类型的泛型类的版本:”LinkedList“。您只需指定泛型类模板参数“使用String,例如”当您实例化它的实例时
LinkedList<String> list = new LinkedList<String>()
然而,您可能会发现使用ListMerger类更简单,该类具有返回LinkedList对象的方法“mergeLists”。
public class ListMerger<E extends Comparable>
{
public LinkedList<E> mergeLists(LinkedList<E> one, LinkedList<E> two)
{
LinkedList<E> newList = new LinkedList<E>();
newList.addAll(one);
newList.addAll(two);
Collections.sort(newList);
return newList;
}
}
正如其他人所说,是的,Collections.sort方法会修改您输入的列表。它不会返回它的排序副本。那么看看我是如何在我的代码中完成的。然后,您需要做的就是获得合并的LinkedList:
ListMerger<String> merger = new ListMerger<String>();
LinkedList<String> mergedList = merger.mergeLists(one, two);
注意我在使用泛型类时如何指定“String”。没有定义它。哦,注意我将名称从ListMerge更改为ListMerger。我猜是个人喜好。
编辑:更新了示例,要求E为“可比较”。这样,Collections.sort()将接受它。
答案 2 :(得分:0)
更改为java.util.Collections
后的问题如下
v this is a type argument
public class ListMerge<String> extends LinkedList<String>
^ this is a type parameter
ListMerge<String>
中的类型参数,即。 <String>
是参数的简单名称。它与java.lang.String
无关。因此you are obscuring类型为java.lang.String
。
这可能实际上是你想要的,即。您计划让ListMerge
适用于所有类型,相当于
public class ListMerge<T> extends LinkedList<T>
如果不是,那么你想要的是
public class ListMerge extends LinkedList<String>
浏览official Java generics tutorial以了解有关泛型类声明语法的更多信息。