这是实现接口的类:
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
简单地说:我做错了什么?谢谢你的帮助!
答案 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;
}
}