使用反射的类方法

时间:2017-10-14 11:12:13

标签: java reflection java-8

所以我认为我的设计很乱, 这就是我得到的。

我的应用程序需要大量枚举,每个枚举包含多个初始化对象和“获取最佳”方法。

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方法?

感谢和抱歉我的愚蠢!

1 个答案:

答案 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