0

抽象クラスを実装する際に問題が発生しています。私は、AbstractClassのパラメータとしてListを持つ抽象メソッドを宣言していますが、実装すると、抽象的なキャシュが拡張されていないと言ってコンパイルエラーが発生します。私はそれを実装するたびに Java抽象メソッドパラメータタイプ

public abstract class MyAbstractClass<T> { 
    abstract protected List<T> MyMethod(List<String> list); 
} 

public class MyClass<MyObject> extends MyAbstractClass { 
    @Override 
    protected List<MyObject> MyMethod(List<String> list){ 
     //Do Stuff 
    } 
} 

は、自動的にそれが List<String>にちょうど Listます。 これには何らかの理由がありますか?ありがとう。

+2

「実装する」方法を示してください。私は生の種類を使用していると思います。 –

+1

パブリッククラスMyClassがMyAbstractClassを拡張したい場合はおそらく { –

答えて

1

私が何をしたいことは、このあると信じて:

public class MyClass extends MyAbstractClass<MyObject> { 
    @Override 
    protected List<MyObject> MyMethod(List<String> list){ 
     //Do Stuff 
    } 

} 
+0

:Pそうです。私はそれがMyObjectとは何の関係もないパラメータについて不平を言っているので、それが私の問題を解決するとは思わなかった。 – CovaDax

1

私はあなたがMyClass typeパラメータTためMyObjectを使用していることを言うだろう

public class MyClass extends MyAbstractClass<MyObject> 

を言うためのものだと思います。

MyClassには型パラメータがあり、基本クラスの型パラメータTとの関係はありません。したがってその場合、MyAbstractClassの参照はMyClassインスタンスを指すことができ、その参照のユーザーはMyClassであることが制限されないように、MyClassがあることを知る必要はありません。T

0

extends MyAbstractClass<MyObject> 

への変更には、Eclipseで、それをテストし、それが動作します。

スーパークラスは、あなたがその型を与えた場合に返す型だけを知ることができるので、ロジックと思われます。そしてあなたがそれに型を与えなければ、それを一般化しなければなりません。

0

の質問は、私はクラスpublic class MyClass extends MyAbstractClass<MyObject> { @Override protected List<MyObject> MyMethod(List<String> list) { // do stuff } }

  • あなただけの総称としてMyObjectにを使用して、このようにそれを命名

    に2可能なケース

    1. MyObjectにしている答えていますあいまいさを持っています 次のように同じタイプが親に渡されます

      public class MyClass<MyObject> extends MyAbstractClass<MyObject> { @Override protected List<MyObject> MyMethod(List<String> list) { // do stuff } }

  • 関連する問題