2

延長したいArrayList。子クラスに s のみを含めることができるように拡張したかったStringのです。コードでエラーが発生するのはなぜですか?

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ということです。クラスの実装にジェネリック型パラメーターを使用していないため、クラス宣言に は必要ありません。ArrayListArrayListString<>

于 2013-03-17T03:15:26.980 に答える
3

コンパイラは、 という名前のジェネリック型パラメーターを宣言しているとString見なし、最終的に実際のStringクラスを非表示にします。型パラメーターをインスタンス化できないため、エラーが発生します。代わりに次のことが必要です。

class ExtendedStringArray extends ArrayList<String> {
     ...
于 2013-03-17T03:17:07.543 に答える
2

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 に答える