Java 中的空匿名内部类

2022-09-01 22:05:21

我正在查看番石榴库,在TypeToken中遇到了一个空的匿名内部类。

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

空的匿名内部类到底有什么用处,它有什么有用的场景?


答案 1

这样做的目的是允许查找实例的超类 - 这将保留类型参数信息。TypeToken

例如,虽然一个对象不知道它的元素类型是,由于擦除,超类信息不会丢失,所以知道它的超类是,而不仅仅是。 使用该技术来表示构造的泛型类型。ArrayList<String>Stringnew ArrayList<String>{}ArrayList<String>ArrayListTypeToken


答案 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);
        }
    }
}

推荐