Как TypeLiteral guice работает?

Как TypeLiteral Guice преодолевает Java универсальная процедура стирания типов?

Это творит чудеса, но как это выполняется?

27
задан mgamer 30 July 2010 в 10:32
поделиться

2 ответа

Уловка, которая используется здесь, заключается в том, что сигнатуры универсальных супертипов хранятся в подклассах и, таким образом, переживают стирание .

Если вы создаете анонимный подкласс new TypeLiteral > () {} Guice может вызвать getClass (). GetGenericSuperclass () и получить для него java.lang.reflect.ParameterizedType , для которого существует метод getActualTypeArguments () для получения List в качестве экземпляра ParameterizedType .

29
ответ дан 28 November 2019 в 05:32
поделиться

Комбинацией анонимных типов, создания подклассов и того факта, что Java не стирает полностью ВСЕ общие объявления.

Если вы присмотритесь, TypeLiteral имеет защищенный конструктор, поэтому вы используете дополнительный {} при создании нового, который создает анонимный подкласс TypeLiteral.

В Java общие объявления сохраняются в объявлениях классов и методов, поэтому, если я напишу это.

public abstract class Class1<T>
{
}

public class Class2 extends Class1<Integer>
{
}

Я могу написать код в Class1, который может определить, что его собственный общий тип - Integer, если Class2 был подклассом.

Ознакомьтесь с API java.lang.Class, чтобы узнать о подходящих методах (у них в названии есть Generic).

8
ответ дан 28 November 2019 в 05:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: