2

我想延长ArrayList. 我想扩展它,使子类只能包含Strings 而没有其他内容。为什么我的代码中出现错误?

import java.util.*;

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

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

}
4

3 回答 3

3

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

public class ExtendedStringArray extends ArrayList<String> {

    public String getAString() {

        return new String("Test"); 

    }

}

您在这里所说的是ExtendedStringArray扩展特定类型的ArrayListArrayList使用类型进行参数化String。由于您没有为类的实现使用任何泛型类型参数,因此您不需要<>在类声明中使用。

于 2013-03-17T03:15:26.980 回答
3

编译器认为您声明了一个名为 的泛型类型参数String,最终隐藏了实际的String类。您不能实例化类型参数,因此会出现错误。你反而想要:

class ExtendedStringArray extends ArrayList<String> {
     ...
于 2013-03-17T03:17:07.543 回答
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>而不是声明一个泛型类。

于 2013-03-17T03:17:55.623 回答