延長したい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
ということです。クラスの実装にジェネリック型パラメーターを使用していないため、クラス宣言に は必要ありません。ArrayList
ArrayList
String
<>
コンパイラは、 という名前のジェネリック型パラメーターを宣言していると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>
化し、ジェネリック クラスを宣言しないことを指定します。