英文:
Confusion in generics in java
问题
我正在学习Java中的泛型。首先,我们创建了一个整数的ArrayList,并向列表中添加了一个值。
import java.util.ArrayList;
import java.util.List;
public class GenericsRunner {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(1);
}
static <X extends List> void duplicate(X list) {
list.addAll(list);
}
}
方法duplicate
只能被那些继承了List
的对象使用。然而,由于List
是一个接口:
public interface List<E> extends Collection<E>
而ArrayList
实现了List
:
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
我在这一点上卡住了。extends
关键字是用于那些从超类继承属性的类。但是ArrayList
是如何扩展(extends)List
的呢?实际上,ArrayList
是实现(implements)了List
。这个extends
关键字是如何在这个实现机制中起作用的呢?我感到困惑,它是在使用extends
和implements
时相同的吗?
英文:
I am learning generics in java.At first we made a arraylist of Integer and we added a value in list.
import java.util.ArrayList;
import java.util.List;
public class GenericsRunner {
public static void main(String[] args) {
ArrayList<Integer> numbers=new ArrayList<>();
numbers.add(1);
}
static <X extends List> void duplicate(X list) {
list.addAll(list);
}
}
The Method duplicate can be only used by those objects which are extending List
. But, since List
is interface
public interface List<E> extends Collection<E>
And ArrayList
is implemeting List
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable,
java.io.Serializable
I got stuck at this point. Extends is used by those classes which inherits the property from super class.
But how Arraylist
is extending List
? Actually ArrayList
is implementing List
. How is this extends keyword working for this implements mechanism? I am getting confused that it is using extends
and implements
are same?
答案1
得分: 1
原因是 <X extends T>
表示的仅仅是 X
是从 T
继承的。在类声明中描述继承时,并没有像在接口中那样特殊的语法。
ArrayList
实现了接口 List
,这意味着它从 List
继承,因此适用于泛型类型 <X extends List>
。
在 Java 中,任何类只能继承 一个 类。默认情况下,当您不指定其他父类时,它继承自 Object
类。类和接口可以实现任意数量的接口。
希望这能有所帮助。
英文:
The reason is <X extends T>
means just that X
is inherited from T
. There is no special syntax for interfaces like when you describe inheritance in class declaration.
ArrayList
implements interface List
which means that it is inherited from List
, thus it is suitable for generic type <X extends List>
.
In Java any class can extend only one class. By default it's Object
when you do not specify another parent class. And class and interface can implement any amount of interfaces.
Hope this helps.
专注分享java语言的经验与见解,让所有开发者获益!
评论