This question already has answers here:
Get generic type of class at runtime
                            
                                (25个答案)
                            
                    
                3年前关闭。
        

    

我有一个抽象类:

abstract class DmValue<T>


许多类都对其进行了扩展,例如:

class DmBoolean extends DmValue<Boolean>

class DmText extends DmValue<String>

class DmDate extends DmValue<Date>


我的问题是如何找到T类?

我需要编写一个静态函数:

static Class getT(Class<? extends DmValue> valueClass){...}


如果valueClass = DmText.class,则getT函数应返回String.class

如果valueClass = DmBoolean.class,则getT函数应返回Boolean.class

有什么建议么?

最佳答案

在构造函数中传递Class<T>

abstract class DmValue<T> {
    Class<T> cls;
    public DmValue(Class<T> cls) {
        this.cls = cls;
    }
    public Class<T> getValueType() {
        return this.cls;
    }
}


然后在您的子类中对其进行初始化,例如

class DmBoolean extends DmValue<Boolean> {
    public DmBoolean() {
        super(Boolean.class);
    }
}


然后,您可以通过调用getValueType()来访问它。

10-07 16:11
查看更多