扩展ArrayList - 无法实例化String类型?

时间:2013-03-17 03:12:56

标签: java arraylist

我想延长ArrayList。我想扩展它,使子类只能包含String s而不包含任何其他内容。为什么我的代码出错?

import java.util.*;

public class ExtendedStringArray<String> extends ArrayList<String>{

    public String getAString() {
        return new String("Test");  
    }

}

3 个答案:

答案 0 :(得分:3)

您的类声明中不需要泛型类型,只需要extends子句:

public class ExtendedStringArray extends ArrayList<String> {

    public String getAString() {

        return new String("Test"); 

    }

}

您在这里说的是ExtendedStringArray扩展了特定类型的ArrayListArrayList参数化了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>而不是声明通用类。