2017-09-14 23 views
2

私が最初に私の状況を述べてみましょう:JAVA:ジェネリック型クラスの継承とジェネリック型の継承

私がきた、サードパーティSDK、ジェネリック型を持つ基底クラスに:私の中

public abstract class BaseClass<T extends BaseDataType> { 
    public abstract class BaseDataType {xxx} 
    public abstract int getCount(); 
    public abstract someMethod(T t); 
} 

次のような事業環境、それがBaseClassを拡張:

​​

実際のビジネスでは、私は私のクラスを記述します。

public class MyClass extends MyGeneralBaseClass<MyDataType> { 
    @Override public someMethod(MyDataType type) {xxx} 
} 

public class MyDataType extends BaseClass.BaseDataType { 
    xxx 
} 

ただし、コードをコンパイルできませんでした。申し訳ありません、旅をしていますが、IDEと開発ツールがないため、エラーを貼り付けることはできません。しかし、IntelliJ IdeaのようなIDEでこれを書き留めれば、私は遭遇しているエラーを引き起こすと思います。

このように、ジェネリック型の継承と、ジェネリック型を使用したクラスの継承。

私が望むものは、MyClassでは、抽象的なBaseDataTypeの代わりに具体的なクラスMyDataTypeを使用しています。

答えて

2

MyGeneralBaseClasBaseClassとしてバインド同じ型を持つジェネリック型パラメータを持つ必要がありそうです:

public abstract class MyGeneralBaseClas<T extends BaseDataType> extends BaseClass<T> { 
    @Override public int getCount() {return some_list.size()}; 
    @Override public abstract someMethod(T t); 
} 
+0

BaseDataTypeクラスを拡張することで、これは私が欲しいものを正確にです。あなたは私に詳細を説明する好意を持っていますか?わかりやすい記事URLを提供することができます。多くのthx –

+0

@McArthorLee 'class MyClass extends MyGeneralBaseClass ' 'MyGeneralBaseClas'に' BaseDataType'を拡張するジェネリック型パラメータを持たせたいと思っていました。したがって、 'MyGeneralBaseClas 'です。 'BaseClass'は' BaseDataType'を拡張する型パラメータを必要とするので、 'class MyGeneralBaseClas extends BaseClass ' – Eran

+0

が得られます。あなたの説明は私のビジネス環境です。いくつかの一般的なJAVA説明を与えることができますか? thx –

0

次の2つの方法でそれを行うことができます。あるとしてBaseDataTypeクラスを使用することにより

  1. 、例:

    abstract class MyGeneralBaseClas<T extends BaseDataType> extends BaseClass<T> { 
        @Override public void someMethod(T t){} 
    } 
    
  2. :例えば、

    class DerivedDataType extends BaseDataType{ 
        //Some code 
    } 
    
    abstract class MyAnotherBAseClass<DerivedDataType> extends BaseClass{ 
        @Override 
        public void someMethod(com.gamesys.application.BaseDataType t) {} 
    } 
    
+0

私は 'BaseDataType'を拡張すると、ビジネス環境にあることを意味します。だから抽象的なクラスの代わりに具象クラスを定義しなければなりません。 –

+0

私は答えを持っています。とにかく。 –

関連する問題