toString()Java中的泛型类型

时间:2010-04-01 00:46:35

标签: java generics

如何打印通用java类型的类型?

反射?任何技巧?

public class Foo<K> {

    private K element;

    @Override
    public String toString() {
        return "Type: " + K;
    }
}

2 个答案:

答案 0 :(得分:6)

element.getClass().getSimpleName()可能会做你期望的事。

答案 1 :(得分:6)

由于type erasure,您无法知道构造类时的类型参数是什么。但是你可以使用element.getClass()来获取元素的运行时类型(可能是类型参数的子类,虽然不能保证 - 可能有未经检查的强制转换)。

但是,有一些技巧可以访问类型参数。 Guice can do有一些技巧。此外,如果您创建Foo的子类,如下所示:Foo<Integer> foo = new Foo<Integer>(){};(注意{}使其成为Foo的匿名子类),然后可以使用{{1}访问type参数然后调用ParameterizedType的方法。这是Guice利用的Java反射API的特性。