2010-11-29 12 views
0

Java型からインスタンスを作成し、パラメータ付きリストを作成することが可能かどうか疑問に思っていましたか?Java型からインスタンスを作成する

私は特定のアノテーションを持つ唯一のメンバ変数を処理していますUserDefinedTypeでの反射を(カスタム注釈を処理するために)使用してメンバ変数List<AnotherUserDefinedType> list(だけでなく、いくつかのプリミティブ型)を持つタイプUserDefinedType

を持っています。アノテーションに特定のプロパティが設定されている場合は、プリミティブ型ではなくAnotherUserDefinedTypeであるため、別の方法で処理されます。この場合、私はUserDefinedTypeで行ったことを正確に行うことでした。

の注意点は、私がField.getGenericType()からAnotherUserDefinedTypeのインスタンスを作成し、何とかList<AnotherUserDefinedType>のパラメータ化のタイプにそれらを追加し、UserDefinedType.setAnotherUserDefinedType(List<AnotherUserDefinedType> list)を呼び出す必要があります。

私はいくつかの情報を見つけようとしましたが、今は紛失しています。いかなる援助も感謝します。パラメータの型は、型パラメータそのものではなく、デフォルトの引数なしのコンストラクタを持つクラスである場合、あなたはこのような何かを行うことができます

答えて

0

public class UserDefinedType { 
    private List<AnotherUserDefinedType> data; 

    public static void main(String[] args) throws Exception { 
     UserDefinedType inst = new UserDefinedType(); 
     ParameterizedType type = (ParameterizedType) UserDefinedType.class.getDeclaredField("data").getGenericType(); 
     Class<?> clazz = (Class<?>) type.getActualTypeArguments()[0]; 
     Object obj = clazz.newInstance(); //this is of type "AnotherUserDefinedType" 
    } 
} 

それはかなりかかわらず総ですが、この中にケースはあなたが反映することができなかったことを達成しません(AnotherUserDefinedTypeを直接インスタンス化することによって)。多分、あなたはこのすべてを通して、あなたの核となる目標を広げることができますか?おそらく、私たちが提案できるよりクリーンなアプローチがあります。

リストは、クラス型のパラメータを持つパラメータ化そのものである場合:

public class UserDefinedType<T> { 
    private List<T> data; 
    //... 
} 

、これは不可能です。タイプは、タイプ消去のため実行時に使用できません。

したがって、型が静的に既知の場合のみ可能です。型が静的に既知の場合は、おそらくリフレクションは必要ありません。

+0

応答マークありがとうございます。最終的には、DAOを実装して、それほど一般的でないデータソース/レスポンスを処理します。基本的には、私は注釈を使用して、多次元配列の文字列をドメインモデルにマーシャリングしています。フィールドアノテーションは、タイプにマップされるレスポンスのプロパティを定義します。これは、多次元配列の文字列内にある値をユーザー定義の型にする可能性があるため、ユーザー定義型の注釈を再帰的にドリルダウンして処理します。 – pertinky

+0

この時点でパラメータ化されます。 – pertinky

関連する問題