java - 通用类 - getClass().getName()

标签 java generics

我有一个通用基类:

public class BaseLabel<T> extends JXLabel {
    private static final long serialVersionUID = 1L;

    public BaseLabel() {
        System.out.println(T.class.getClass().getName()); //error
    }       
}

和子类:

public class ChildLabel extends BaseLabel<ChildLabel> {
    private static final long serialVersionUID = 2L;

    public ChildLabel() {

    }       
}

我遇到编译错误。

有什么方法可以从 BaseClass 的构造函数中获取实际的类名。在这里,我指的是实际类,我将实例化它。

例如我正在实例化 ChildClass,ChildClass clz = new ChildClass();

然后 println() 将打印 package.ChildClass

提前致谢。


编译错误为:

cannot select from a type variable System.out.println(T.class.getClass().getSimpleName());

如果我从 abstract BaseClass 的构造函数中调用 this.getClass.getSimpleName()。它正在打印 ChildClass

为什么?

是不是因为我正在实例化 ChildClass 所以 this 指向 ChildClass 的对象。

最佳答案

丑陋?是的

import java.lang.reflect.ParameterizedType;


public class GenericClass<T> {

    public GenericClass() {
        System.out.println(getClass().getGenericSuperclass()); //output: GenericClass<Foo>
        System.out.println(((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0]); //output: class Foo
    }

    public static void main(String[] args) {
        new ChildClass();
    }

}

子类

import java.lang.reflect.ParameterizedType;


public class ChildClass extends GenericClass<Foo> {

    public ChildClass() {
        System.out.println(((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]); //output: class Foo
    }

}

关于java - 通用类 - getClass().getName(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9416968/

相关文章:

java - 如何从 Spring Data 存储库调用 MySQL 函数

java - 从 Maven 插件扫描自定义注释类

c# - List<T> 项的 T 泛型

java - 使用 javac 而不是 Eclipse 编译泛型时出错

java - 将 NewDirectByteBuffer 从 C++ 传递到 Java (JNI)

java - 启动@Async : what is best way to create 1000 no of threads using spring

java - 如何消除Java中的CommunicationException?

function - 如何从泛型函数返回具体类型?

java - 奇怪的 Java 泛型

java - Java HashMap使用通配符嵌套泛型