延長したいArrayList。子クラスに s のみを含めることができるように拡張したかったStringのです。コードでエラーが発生するのはなぜですか?
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ということです。クラスの実装にジェネリック型パラメーターを使用していないため、クラス宣言に は必要ありません。ArrayListArrayListString<>
コンパイラは、 という名前のジェネリック型パラメーターを宣言しているとString見なし、最終的に実際のStringクラスを非表示にします。型パラメーターをインスタンス化できないため、エラーが発生します。代わりに次のことが必要です。
class ExtendedStringArray extends ArrayList<String> {
...
Stringクラス宣言でどちらかを使用しているため、拡張元でどちらかを使用しています。これは、文字列が文字通り型変数として使用され、コードが実際に同等であることを意味します
public class ExtendedStringArray<T> extends ArrayList<T>{
public T getAString(){
return new T("Test");
}
}
ただし、ジェネリック型のオブジェクトをインスタンス化できないため、これは正しくありませんT。
使用:class StringArrayList extends ArrayList<String> { ..を特殊ArrayList<String>化し、ジェネリック クラスを宣言しないことを指定します。