所以我认为我的设计很乱, 这就是我得到的。
我的应用程序需要大量枚举,每个枚举包含多个初始化对象和“获取最佳”方法。
enum MyNumberEnum{
First("First", 1)
Third("Third", 3)
public String name;
public int num;
MyNumberEnum getBest(int num){
MyNumberEnum bestNumber = First;
for (MyNumberEnum number: MyNumberEnum.values()) {
if (number.num <= num)
bestNumber = number;
}
return bestNumber ;
}
}
所有枚举都具有相同的getBest,并且所有枚举都应具有字段num, 因为Enums不能扩展,所以思想也许接口可能会有帮助,但如果枚举实现了一个接口,那么它的每个实例都不会实现enum itlef。
public abstract class Best {
public abstract Enum<?> getBest(int num);
}
class MyNumberClass extends Best {
public abstract Enum<?> getBest(int num){return MyNumberEnum.getBest(num)}
}
所以我想也许创建一个类并在内部放置Enum,然后我可以扩展获得最佳方法。
所以为了方便使用,我创建了一个HashMap 然后添加了map.put(“Number”,MyNumberClass.class)
但后来我得到了一个我得到Class对象的点, 我怎样才能使用它的getBest方法?
感谢和抱歉我的愚蠢!
答案 0 :(得分:1)
使用doc: https://docs.oracle.com/javase/tutorial/reflect/member/methodInvocation.html
我用过: return(枚举)enumMap.get(enumName).getDeclaredMethod(&#34; getBest&#34;,Script.class).invoke(null,api);
因为它继承自Best类及其静态方法。 它可以使用像.getBest()这样的更简单的东西 显然它不能。
由于 @nullpointer