0

私は私の一般的なインターフェースを持っています:

public interface myGenericInterface<T> {...}

そして、私はこの方法で取得したクラスを持っています:

Class<?> myClass = Class.forName("myClassName");

私はこのようなものをインスタンス化できるようにしたいと思います:

myGenericInterface<myClass> mySubType ...

もちろん機能していません。そのようなことをする方法はありますか?

アップデート:

まあ、ジェネリックはコンパイル時に関連するので、リフレクション スタイルのコードでは機能しないと思います。だから、そこから良いものは生まれません。

4

2 に答える 2

2

ジェネリックは、プログラミング エラーを回避するのに役立つコンパイル時の機能であるため、何をしようとしているのか意味がありません。申し訳ありません。

于 2012-08-31T10:34:35.920 に答える
1

クラスフィールドでジェネリックを使用してオブジェクトを宣言すると、このクラスのフィールドリフレクションオブジェクトは、宣言されたジェネリックの種類を保持します。

static class ClassA {
    public List<String> field = new ArrayList<String>();
}

public static void main(String[] args) throws Exception {
    Field field = ClassA.class.getField("field");
    Class<?> genericType = getGenericType(field);
    System.out.println(genericType);
}

private static Class<?> getGenericType(Field field) {
    final Type type0 = field.getGenericType();
    if (type0 instanceof ParameterizedType) {
        final Type type = ((ParameterizedType) type0).getActualTypeArguments()[0];
        if (type instanceof Class<?>) {
            return (Class<?>) type;
        }
        // miss code for method arguments
    }
    return Object.class;
}

コードは出力class java.lang.Stringされ、あなたの場合に役立ちますが、基本的に生のクラスオブジェクトはジェネリック情報を運びません-ジェネリック情報は実行時ではなくコンパイル時にのみ使用されるためです。

于 2012-08-31T11:49:26.253 に答える