gpt4 book ai didi

java - 通过反射使用类方法

转载 作者:行者123 更新时间:2023-11-30 06:27:54 24 4
gpt4 key购买 nike

所以我认为我的设计有点困惑,这是我得到的。

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

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,因为枚举无法扩展,所以认为接口(interface)可能会有所帮助,但如果枚举实现了接口(interface),那么它的每个实例都只是实现了枚举本身。

public abstract class Best {

public abstract Enum<?> getBest(int num);
}

class MyNumberClass extends Best {
public abstract Enum<?> getBest(int num){return MyNumberEnum.getBest(num)}
}

所以我想也许创建一个类并在里面放入枚举,然后我可以扩展获取最佳方法。

所以为了方便使用,我创建了一个HashMap然后添加map.put("Number", MyNumberClass.class)

但是后来我得到了 Class 对象,我如何使用它的 getBest 方法?

感谢并为我的愚蠢感到抱歉!

最佳答案

使用文档: https://docs.oracle.com/javase/tutorial/reflect/member/methodInvocation.html

我用过: return (Enum)enumMap.get(enumName).getDeclaredMethod("getBest", Script.class).invoke(null, api);

因为它继承自Best类,并且是静态方法。它可以使用更简单的东西,比如 .getBest()显然不能。

谢谢@空指针

关于java - 通过反射使用类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46743867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com