在java中清空匿名内部类

Pri*_*shi 22 java anonymous-class inner-classes guava

我正在调查Guava图书馆,我遇到了一个空洞的匿名内部课程TypeToken.

TypeToken<List<String>> stringListTok = new TypeToken<List<String>>() {};
Run Code Online (Sandbox Code Playgroud)

什么是空匿名内部类的确切使用以及哪些有用的场景可以提供帮助?

Jon*_*eet 33

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

例如,虽然一个ArrayList<String>对象不知道它的元素类型是String由于擦除,但是超类信息不会丢失,因此new ArrayList<String>{}知道它的超类ArrayList<String>不仅仅是ArrayList.TypeToken使用该技术来表示构造的泛型类型.

  • 我一直在使用`TypeToken`,但从未完全理解这种微妙和聪明.这太棒了 (3认同)

Aug*_*sto 18

Guava可能会使用一种用途.如您所知,类型在编译后会丢失,但如果类型在类级别处被填充,那么它在编译后不会丢失,并且可以通过反射来提取.我会在一分钟内将代码提取出来.


编辑我不知道代码是否有用,但在这里

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)