使用泛型方法从接口访问静态类变量?

时间:2016-05-27 16:16:31

标签: java

这是实现接口的类:

public class Dragon extends Character implements Actions {
    static int runRequirement = 95;
}

界面:

public interface Actions {
default <T> boolean run(T enemy) {
    if (Math.random() * 100 < T.runRequirement) {
        return false;
    } else {
        return true;
    }
}

现在......我知道T是一个通用的类型,因此类型无法访问静态变量是合理的,即使它也是类的名称。

但是,我甚至无法访问静态变量:

T.getClass().runRequirement

或:

T.getClass().getName().runRequirement // getName() returns a String, but I tried it anyway...

或:

enemy.getClass().runRequirement

简单地说:我做错了什么?谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

只需enemy.runRequirement

您可以从实例访问静态变量

答案 1 :(得分:0)

您可以对class对象的enemy使用反射:

    public interface Actions {
        default <T> boolean run(T enemy) {
            int runRequirement = 0;
            try {
                Field field = enemy.getClass().getDeclaredField("runRequirement");
                field.setAccessible(true);
                runRequirement = Integer.parseInt(field.get(null).toString());
            } catch (Exception e) {
            }
            if (Math.random() * 100 < runRequirement) {
                return false;
            } else {
                return true;
            }
        }