Как TypeLiteral работы guice это?
Как Guice TypeLiteral преодолевает процедуру стирания общих типов Java?
Он творит чудеса, но как это достигается?
2 ответов
трюк, который используется здесь, заключается в том, что подписи общих супер типов хранятся в подклассах и, следовательно,выжить стирание.
если вы создаете анонимный подкласс new TypeLiteral<List<String>>() {} Guice может вызвать getClass().getGenericSuperclass() его java.lang.reflect.ParameterizedType на котором существует метод getActualTypeArguments() и List<String> в качестве примера ParameterizedType.
комбинацией анонимных типов, подклассов и тем, что Java не полностью стирает все общие объявления.
Если вы внимательно посмотрите, TypeLiteral имеет защищенный конструктор, поэтому вы используете дополнительный {} при построении нового, который создает анонимный подкласс TypeLiteral.
в Java общие объявления сохраняются в объявлениях класса и метода, поэтому, если я напишу это.
public abstract class Class1<T>
{
}
public class Class2 extends Class1<Integer>
{
}
Я могу написать код в Class1, который может выяснить, что его собственный универсальный тип является целым, если Class2 был подклассом.
Проверьте java.ленг.Класс API для соответствующих методов (они имеют общее название).
