0

クラス オブジェクトを使用してジェネリックの型を宣言することは可能ですか?

たとえば、次のようなことをしたいと思います。

Class returnType = theMethod.getReturnType();

AttributeComponent<returnType> attComponent;

attComponent = new AttributeComponent<returnType>(returnType, attName);
attributeComponents.put(methodName.substring(3), attComponent);

明らかにこれが正しくないことはわかっていますが、これを達成する方法はありますか?

編集:少し説明

リフレクションを使用してすべてのゲッターを通過し、各プロパティの UI 要素 (JComponent 要素と JLabel を持つ AttributeComponent クラス) を生成しています。プロパティ タイプのオブジェクトを返す getValue() メソッドを作成するために、ジェネリックを使用したいと考えています。

4

2 に答える 2

3

そのようなものをコンパイルする方法があるかどうかはわかりませんが、ほとんど価値がありません。

タイプ eraserのおかげで、コンパイルされたクラスは Generics 情報を使用しないと考えてください。つまり、 aを実行すると、コンパイル時にSet<String> a = new Set<String>();の使用をチェックするのに役立ちますが、実行時には役立ちません。a

したがって、型が実行時にのみ認識される Generic をインスタンス化する必要がありますが、実行時には使用されません。

于 2012-10-08T08:52:17.517 に答える
2

これは、メソッドの戻り型をジェネリックとして定義することで実現できると思います。ただし、実際の型をクラス引数として渡して、次のように使用する必要があります。

<T> T yourMethod(Class<T> returnType) {
    // use <T> as generic and returnType to refer to the actual T class
    /* ... */ new AttributeComponent<T>(returnType, attName);
}

あなたがやろうとしていることのより大きな文脈を見ることもまた役に立ちます。AttributeComponent.getValue()ジェネリック型(メソッドの戻り型)を返したい場合T、コンパイル時に各メソッドの戻り型を知らない限り、それはまったく役に立ちません。そうでない場合Tは、にすぎませんObject。上記の私の例では、yourMethodすでに知っているクラスを使用して呼び出すと、同じタイプ(またはAttributeComponentそのタイプの一部など)が返されます。

于 2012-10-08T08:52:39.000 に答える