class A<E>{
}
class B<E> extends A{
}
public class WildInDeclare<E>{
public static void main(String[] args){
A<Integer> obj = new B<Integer>();
}
}
上記のプログラムをコンパイルすると、このエラーが発生します。Javaのジェネリックスを使用した継承
Note: WildInDeclare.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
その後、私はちょうどclass B<E> extends A{
、それが正常に動作しますが、それが再びコード例で継承の際A<E>
をしてください書くために必要な理由を説明することができますclass B<E> extends A<E>{
に交換してください。
私が直面した第2の問題。 上記のコードを次のコードで更新します。
class A<E>{
public A(E o){
}
}
class B<E> extends A{
public B(){
super(E);
}
}
public class WildInDeclare<E>{
public static void main(String[] args){
A<Integer> obj = new B<Integer>();
}
}
しかし、なぜコンパイルされていませんか?私は次のエラーを受け取りました。
WildInDeclare.java:8: error: cannot find symbol
super(E);
^
symbol: variable E
location: class B<E>
where E is a type-variable:
E extends Object declared in class B
Note: WildInDeclare.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 error
どのように私はパラメータを親クラスに渡すことができますか?
あなたはどのようなコンパイラエラーメッセージが出ますか:あなたはそれだけでスーパークラスのコンストラクタに渡す入力パラメータを取るために
B
を望んでいた場合、それは次のようになりますか? –
であるため、クラスのシグネチャにジェネリックが含まれている 'A'から継承しています。 'A'はrawtypeとして継承されます(クラスBのジェネリック' E'は 'A'のジェネリックとしても使われなければなりません)。 – SomeJavaGuy
@ OleV.V。質問が更新されました。 –