2011-01-09 11 views
1

次のクラスがあるとします。汎用オブジェクトのクラスを見つける

public class gen<T> { 
    public gen(){ 
    } 
    Class<T> class(){ 
     //something that figures out what T is. 
    } 
} 

どのように追加情報を渡すことなくclass()関数を実装できますか?

私はここにいますが、Tのオブジェクトをオブジェクトgenに渡す必要があります。

public class gen<T> { 
    public gen(){ 
    } 
    Class<T> class(T var){ 
    return (Class<T>) var.getClass(); 
    } 
} 

答えて

1

実際にはかなりの量の反射を使用してこれを行うことができます。このリンク:

http://www.artima.com/weblogs/viewpost.jsp?thread=208860

はそれを行う方法のかなり良い議論を持っています。それは難しい、悪い、そしてハッキーですが、それは行うことができます。

+0

良い発見!それを読んだ後は、私が今持っているものに固執するのがずっと簡単だと思います。ハハ –

3

実行時の値Tを把握することはできません。これはtype erasureが原因です。

+0

うわー、このようなものはできません。 Javaは私が思ったほど柔軟ではありません。 –

+0

私はデザイナーは、このようなリフレクションを行う能力よりも後方互換性が重要だと考えていたと思います。実際には、これを行う必要はまれですが、そうですか? – sjr

3

いいえ。クラスのコンパイル済みバージョンのバイトコードは、型消去のためにTを判断するのに十分な情報を保持しません。あなたがタイプTの実際のオブジェクトを渡すことでやったことは、あなたができる最高のものです。

関連する問題