我想延长ArrayList
. 我想扩展它,使子类只能包含String
s 而没有其他内容。为什么我的代码中出现错误?
import java.util.*;
public class ExtendedStringArray<String> extends ArrayList<String>{
public String getAString() {
return new String("Test");
}
}
您不需要在类声明中使用泛型类型,只需在extends
子句中:
public class ExtendedStringArray extends ArrayList<String> {
public String getAString() {
return new String("Test");
}
}
您在这里所说的是ExtendedStringArray
扩展特定类型的ArrayList
,ArrayList
使用类型进行参数化String
。由于您没有为类的实现使用任何泛型类型参数,因此您不需要<>
在类声明中使用。
编译器认为您声明了一个名为 的泛型类型参数String
,最终隐藏了实际的String
类。您不能实例化类型参数,因此会出现错误。你反而想要:
class ExtendedStringArray extends ArrayList<String> {
...
因为您String
在类声明中使用任何一个,或者在它扩展的地方使用。这意味着 String 字面上用作类型变量,您的代码确实等同于
public class ExtendedStringArray<T> extends ArrayList<T>{
public T getAString(){
return new T("Test");
}
}
但这是不正确的,因为您不能实例化泛型类型的对象T
。
使用:class StringArrayList extends ArrayList<String> { ..
以便您指定您正在专门化一个ArrayList<String>
而不是声明一个泛型类。