Подтвердить что ты не робот

Пустой анонимный внутренний класс в java

Я искал библиотеку Guava, и я наткнулся на пустой анонимный внутренний класс в TypeToken.

TypeToken<List<String>> stringListTok = new TypeToken<List<String>>() {};

Что именно использует пустой анонимный внутренний класс и каковы полезные сценарии, где это может быть полезно?

4b9b3361

Ответ 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);
        }
    }
}