Создайте параметризованный класс, используя тип поля другого класса - PullRequest
1 голос
/ 14 ноября 2011

Я хотел бы использовать тип, полученный из поля класса (используя отражение), для создания экземпляра класса с обобщениями.
Примечание.1004 * Разумно ли то, чего я хочу достичь?Любая мысль о том, как я могу решить эту проблему?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 14 ноября 2011

То, что вы пытаетесь сделать, не является разумным, потому что, если вы посмотрите на следующую строку:

BClass<typeClass> = new BClass<typeClass>();

typeClass - это то, о чем должен знать компилятор.Но в вашем случае это известно только во время выполнения через отражение.

Компилятору нужно стереть T в BClass<T> и заменить его конкретным типом, который в вашем случае неизвестен во время компиляции, поэтому логически он недопустим.

1 голос
/ 14 ноября 2011

Вы можете захватить аргумент типа типа typeClass:

Field f = ...;
Class<?> typeClass = f.getType();
withClassCapture(typeClass);

private <T> void withClassCapture(Class<T> klazz) {
    BClass<T> instance = new BClass<T>();
    // ... do your thing
}
...