public class MyArrayList <T extends ArrayList> {
这并不意味着你的类扩展了arraylist。
这意味着您的类会说:对于此类型的每个类型引用(例如,当您声明一个接受
MyArrayList
,或者您生成类型为的变量
MyArrayList
-每当你提到“MyArrayList”,类型)时,都会有一个类型参数。这意味着——无论你想它意味着什么(通常对于列表,人们会认为它的意思是:“我应该持有的东西的类型”——这就是它的含义
java.util.ArrayList
-一个
ArrayList<String>
是一个包含字符串对象的数组列表)。
具体来说,我们将把这种类型称为“T”,无论它是什么,我们也将限制它:它必须是
ArrayList
或者它的某个子类型。特别是原始arraylist类型(你真的不想要)。
换句话说,每当有人
使用
在这个类中,他们选择的T必须扩展ArrayList。
类型变量本身不执行任何操作。您刚刚声明,任何类型的使用都意味着用户会选择某种类型T。好的。如果你什么都不做,那就没有任何意义。
大概你想要的是:
public class MyArrayList<T> extends ArrayList<T> {}
上面写着:
-
随时
MyArrayList
被用作类型,用户必须选择一些类型,我们称之为“T”;每个使用都会选择自己的T,所以我们不知道T是什么——我们编写代码
全部的
用户,所以,T是同时发生的一切。这是一种元类型。
-
我们扩展
ArrayList
。嘿,我们是
使用
ArrayList作为一种类型,而ArrayList要求我们选择一种类型!
-
我们选择“T”。我们的T。注意语法是相同的(
<T>
在这两种情况下),但它们代表不同的东西。第一个
<T>
声明一个类型变量
。第二
<T>
使用它。我们说我们的类扩展
ArrayList<T>
其中T是我们类的用户所选择的。
您的课程现在将扩展
ArrayList
和
ArrayList
,反过来,实现
Iterable<T>
。如果希望类型的表达式在中的“collection”位置可用,则必须实现Iterable
for (SomeType variableName : collection) {}
.你的代码片段没有(它没有扩展任何内容,只有它的t扩展了,这对你自己的类型没有影响)-通过这个修复,它确实扩展了。