2011-07-14 10 views
1

私は、ジェネリックまたは消去種類と非常に良好ではないが、私は以下のクラスがあります。ジェネリッククラスを別のジェネリッククラスで作成するにはどうすればよいですか?

AbstractEventBuffer<BufferedEvent<T>> 

BufferedEvent<T> 

を、私は私が働いているこれらのクラスの具体的な実装を持っていますが、 AbstractEventBufferにはBufferedEventが付きますので、私はどのように持っているのですかTどうすればいいですか?

私は後でコードの複製を最小限に抑えるためにこれらを非常に汎用的に保つようにしています。

は、なぜ私は...のように私のAbstractEventBufferクラスを作成することはできません

public abstract class AbstractEventBuffer<BufferedEvent<T>> 
+0

クラスを宣言したり、インスタンスを作成しようとしていますか?試してみると何のエラーが出ますか? – highlycaffeinated

+0

スニペットを投稿して、何も動作しないことを表示できますか(コンパイルエラーの場合) – timaschew

+0

抽象クラスは何ですか? – timaschew

答えて

0

あなたは抽象クラスをインスタンス化することはできません。

+0

申し訳ありませんが情報が不足しているため、私はこれをやろうとしている私の抽象クラスを拡張するクラスを持っています。 –

1

私はあなたが群衆を聞いたと仮定します。

クラスのコンクリートを作ります。

コンクリート一度、あなたはそれが実行してタイプだとして、それはgeneric(任意の型の)のみEventを受け入れるクラスまたはEventのサブクラスも加えることができます。

public class Buffer<T extends Event<?>> { 

乾杯を!

3

多分あなたは、このような宣言(私はこれがそれだと思う)を考える:

public abstract class AbstractEventBuffer<E extends BufferedEvent<?>> 

か:

public abstract class AbstractEventBuffer<T, E extends BufferedEvent<T>> 

または

public abstract class AbstractEventBuffer<E extends BufferedEvent<? extends Object>> 

かな:

public abstract class AbstractEventBuffer<BufferedEvent> { 

0

私は(C#のに移っ)中でJavaを行っていないが、私ははっきりと覚えていれば、このようなものが可能です:

public abstract class Buffer<T extends Event<I>> 

そしてもちろん、あなたがするので、この抽象クラスバッファを拡張する最初の必要性を抽象クラスをインスタンス化することはできません。

public class EventBuffer<T> extends Buffer<Event<T>> { 
+0

それはコンパイルされていない、私の答えで同様のサンプルを見て – zacheusz

+0

これは動作しません、私の答えを参照してください –

0

それはあなたがまた、のようなものを試してみたいことがありますようにあなたの質問から聞こえます。 イベントはおそらく自身のタイプパラメータをのままにしておかなければなりませんが、2つのタイプのparamsを持つzacheuszの最初の例は正しい方法です。それをやり直さないでください:

class BufferedEvent<T>{} 

abstract class AbstractEventBuffer<E extends BufferedEvent>{} 

class EventBuffer<E extends BufferedEvent> extends AbstractEventBuffer 
{ 
    public static void main (String[] args) 
    { 
      EventBuffer<BufferedEvent> buffer = new EventBuffer<BufferedEvent>(); 
    } 
} 
-1

あなたの質問は少し混乱して、コードを以下のことは、法的、おそらくあなたが望むものをやっている:

関連する問題