Java LinkedList子列表是否返回列表而不是LinkedList?
我有一个函数Java LinkedList子列表是否返回列表而不是LinkedList?,java,list,oop,types,linked-list,Java,List,Oop,Types,Linked List,我有一个函数f,它获取LinkedList的子列表,并将其传递给g,该子列表也接受LinkedList: public static <T> void g(LinkedList<T> l) { } public static <T> void f() { LinkedList<T> l = new LinkedList<T>(); ... LinkedList<T> l2 = l.subList(i
f
,它获取LinkedList
的子列表,并将其传递给g
,该子列表也接受LinkedList
:
public static <T> void g(LinkedList<T> l) {
}
public static <T> void f() {
LinkedList<T> l = new LinkedList<T>();
...
LinkedList<T> l2 = l.subList(i,j);
...
g(l2);
}
为什么?
子列表
在列表
界面中定义,并返回一个列表
。如果您在LinkedList
中检查实现,它实际上在父类之一(AbstractList
)中,您将看到它不会返回LinkedList
而是子列表,您的强制转换将抛出异常
除非您使用特定于LinkedList
的方法,否则解决此问题的最简单方法是将g
更改为:
public static <T> void g(List<T> l) {
公共静态无效g(列表l){
子列表
在列表
界面中定义,并返回一个列表
。如果您在链接列表
中检查实现,它实际上位于父类之一(抽象列表
),您将看到它不会返回一个链接列表,而是返回一个子列表,您的强制转换将抛出一个异常
除非您使用特定于LinkedList
的方法,否则解决此问题的最简单方法是将g
更改为:
public static <T> void g(List<T> l) {
公共静态无效g(列表l){
如果g()不使用LinkedList的方法,但只使用List接口,则最好按如下方式定义g():
public static <T> void g( List<T> l ) {
}
公共静态无效g(列表l){
}
主要是:
public static <T> void f() {
List<T> l = new LinkedList<T>();
...
List<T> l2 = l.subList(i,j);
...
g(l2);
}
publicstaticvoidf(){
列表l=新的LinkedList();
...
列表l2=l.子列表(i,j);
...
g(l2);
}
为了说明理由,.如果g()不使用LinkedList的方法,但最好只使用列表接口来定义g(),如下所示:
public static <T> void g( List<T> l ) {
}
公共静态无效g(列表l){
}
主要是:
public static <T> void f() {
List<T> l = new LinkedList<T>();
...
List<T> l2 = l.subList(i,j);
...
g(l2);
}
publicstaticvoidf(){
列表l=新的LinkedList();
...
列表l2=l.子列表(i,j);
...
g(l2);
}
作为一个理由,.Java想要尽可能多的多态性,所以子列表返回列表,您必须将其转换为您想要的形式。Java想要尽可能多的多态性,所以子列表返回列表,您必须将其转换为您想要的形式。方法子列表
在列表中声明ace由LinkedList
实现。列表
界面中子列表
方法的签名为:
List<E> subList(int fromIndex, int toIndex)
列表子列表(int-fromIndex,int-toIndex)
因此,每当您从LinkedList
类调用此方法时,对象将是LinkedList
,但方法的返回类型是List
,因此它将以List
的形式给出。但是,您可以将变量强制转换为LinkedList
并使用它。方法子列表
是dec>在由LinkedList
实现的列表
界面中显示。在列表
界面中子列表
方法的签名为:
List<E> subList(int fromIndex, int toIndex)
列表子列表(int-fromIndex,int-toIndex)
因此,每当您从LinkedList
类调用此方法时,对象将是LinkedList
,但方法的返回类型是List
,因此它将以List
的形式给出。但是,您可以将变量强制转换为LinkedList
,并使用它。您不能实例化像L这样的“对象”List是一个接口,不是一个具体的类。
接口只是类可以实现的一组函数;实例化接口没有任何意义
希望能有帮助
克莱门西奥·莫拉莱斯·卢卡斯。你不能实例化“对象”这样的列表。列表是一个接口,而不是一个具体的类。
接口只是类可以实现的一组函数;实例化接口没有任何意义
希望能有帮助
克莱门西奥·莫拉莱斯·卢卡斯。编程到接口,而不是实现。编程到接口,而不是实现。说得好,mate..sublist()来自列表,而不是LinkedList不幸的是,g
需要一个LinkedList
。你可以随时调用g(新LinkedList(sublist));
…说得好mate..sublist()是从列表而不是从LinkedList不幸的是,g
需要一个LinkedList
。您可以随时调用g(新LinkedList(子列表));
…实际上,它返回一个java.util.SubList
,因此您不能将其强制转换为您想要的任何内容!java.lang.ClassCastException:java.util.SubList不能强制转换为java.util.LinkedList
实际上,它返回一个java.util.SubList
,因此您不能将其强制转换为您想要的任何内容!java.lang.ClassCastException:java.util.SubList不能转换为java.util.LinkedList