Java从泛型类型中提取类信息

时间:2014-10-23 19:02:26

标签: java generics

如何为Class<T>分配值 - 而不必明确传递它?我知道类型擦除的故事。但我想知道:Java编译器没有看到Class<T> c并意识到我在谈论<T>,我不应该在没有初始化的情况下使用这个变量!或者不应该将其自动初始化为基元。为什么没有这样设计呢?

static class D<T> {
    T t;
    Class<T> c;

    D(T t) {
        this.t = t;
        method(t.getClass()); // no error!
        c = t.getClass(); // error!
    }

    void q() {
        method(c); // no error at compile time
    }
}

static <K> void method(Class<K> clazz) {
}

1 个答案:

答案 0 :(得分:3)

这是因为getClass()是Object基类的方法。该方法返回类型“Class <?>”的值。因此,如果没有类型转换,您无法将其分配给Class<T>