2016-10-27 22 views
0

タイプリストのジェネリック型以外の汎用クラス/メソッドを作成するにはどうすればよいですか?タイプのセットにワイルドカード型の汎用メソッドを作成するにはどうすればよいですか?

class Foo { 
    Object arrayOfTypes[] = {Integer, Double, Boolean}; 

    public <T in arrayOfTypes> void Bar() { 
     ... 
    } 
} 

ので、Tは整数、ダブル、またはブールのいずれかである必要があります:これは私が何をしたいの擬似コードです。また、使用できる唯一のクラスはライブラリからのものなので、それらを編集して特定のクラスを拡張することはできず、<T extends Car>のようなことをします。これを行う方法はありますか?

+0

これはできません。 Genericsは純粋にコンパイル時の健全性チェックのためのものです。実行時には存在しないので、コードはJVMに意味をなさないでしょう。あなたが達成しようとしていることを説明できますか?メソッドのオーバーロードによって問題が解決される可能性があります。 – 4castle

答えて

1

あなたの要件はジェネリック医薬品には意味がありません。あなたはこの方法が共通のスーパークラスを共有しないタイプとこれらのタイプのいずれかの変数を受け入れるか、または(Objectの延長を除く)共通のインタフェースを実装したい場合は、実行する必要があります。

public void bar(TypeOne t) { /*...*/ } 

public void bar(TypeTwo t) { /*...*/ } 

public void bar(TypeThree t) { /*...*/ } 

をを利用することにより、過負荷。あなたの3つのタイプに共通するものがない場合、いずれの方法でも(ジェネリックの有無にかかわらず)単一のメソッドがすべて対応できる方法はありません。


4castleが私の数分前にコメントで同じことを言ったので、私はもう少し分かります。

一般的な方法は、タイプ間に共通点がある場合に意味があります。つまり、すべてのタイプがCommonという共通インターフェイスを実装しており、そのメソッドはString do(int i)と宣言しているとします。次に、メソッドを書くことができます

public void <T extends Common> bar(T instance) { 

    String result = instance.do(3); 
    //... 
} 
関連する問題