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