toString()是Java中的泛型类型

toString()是Java中的泛型类型,java,generics,Java,Generics,如何打印泛型java类型的类型 反思?有什么把戏吗 public class Foo<K> { private K element; @Override public String toString() { return "Type: " + K; } } element.getClass.getSimpleName可能会执行您期望的操作。因为,您无法知道在构造类时类型参数是什么。但是您可以使用element.getClass来获

如何打印泛型java类型的类型

反思?有什么把戏吗

public class Foo<K> {

    private K element;

    @Override
    public String toString() {
        return "Type: " + K;
    }
}
element.getClass.getSimpleName可能会执行您期望的操作。

因为,您无法知道在构造类时类型参数是什么。但是您可以使用element.getClass来获取元素的运行时类型,该类型可能是type参数的子类,尽管不能保证,可能存在未经检查的强制转换


但是,有一些技巧可以访问类型参数。有一些技巧可以帮助你。另外,如果您创建一个子类Foo,比如:Foo-Foo=new-Foo{};请注意{},它使它成为Foo的匿名子类,然后可以使用parameteredType type=parameteredType Foo.getClass.getGenericSuperclass访问类型参数,然后调用的方法。这是Java反射API的特性,Guice也利用了这一特性。

K.class.getSimpleName是否也能做到这一点?我已经10多年没有使用java了,所以我错过了泛型。我可能错了。但是如果元素变量没有初始化,有没有其他方法可以在不获取空指针异常的情况下获取类型?K.class将无法工作,甚至可能不会编译。是的,您需要进行空检查。不,因为类型擦除,没有其他方法,没有关于K的运行时信息,除非你自己存储它。@davidrobles-hmm。实际上不确定