Пустой анонимный внутренний класс в java
Я искал библиотеку Guava, и я наткнулся на пустой анонимный внутренний класс в TypeToken
.
TypeToken<List<String>> stringListTok = new TypeToken<List<String>>() {};
Что именно использует пустой анонимный внутренний класс и каковы полезные сценарии, где это может быть полезно?
Ответы
Ответ 1
Цель состоит в том, чтобы позволить TypeToken
найти суперкласс объекта - который сохранит информацию о аргументе типа.
Например, хотя объект ArrayList<String>
не знает, что его тип элемента String
, из-за стирания информация суперкласса не теряется, поэтому new ArrayList<String>{}
знает, что его суперкласс - это ArrayList<String>
, а не только ArrayList
. TypeToken
использует эту технику для представления построенного общего типа.
Ответ 2
Там можно использовать, что Гуава может использовать. Как вы знаете, типы теряются после компиляции, но если тип выражается на уровне класса, то он не теряется после компиляции и может быть извлечен путем отражения. Я положу код для извлечения типа через минуту.
Изменить
Я не знаю, подходит ли код, но вот он
public class Reflect {
public static void main(String[] args) {
Super<String> aStringSuper = new Super<String>() {};
aStringSuper.method();
Super<List<Integer>> aListSuper = new Super<List<Integer>>() {};
aListSuper.method();
}
}
class Super<T> {
public void method() {
Type genericSuperclass = this.getClass().getGenericSuperclass();
ParameterizedType parameterizedType = (ParameterizedType) genericSuperclass;
for(Type type : parameterizedType.getActualTypeArguments()) {
System.out.println(type);
}
}
}