gpt4 book ai didi

Java尝试进行反射(类实例并在运行时调用方法)

转载 作者:行者123 更新时间:2023-12-02 05:59:09 25 4
gpt4 key购买 nike

这是我的代码。

String name = "expevaluator." + super.left.getClass().getSimpleName() + super.right.getClass().getSimpleName() + "Addition";
try {
Object instance;
instance = Class.forName(name).newInstance();
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) {
Logger.getLogger(Addition.class.getName()).log(Level.SEVERE, null, ex);
}

我正在尝试调用变量“name”类的评估函数。

这是评估函数。

public Number evaluate(int left, int right) {
return left + right;
}

这是 IntegerIntegerAddition 类的评估方法

我还有 IntegerDoubleAddition 类评估方法

public Number evaluate(int left, double right) {
return left + right;
}

因此变量名称可以为“IntegerIntegerAddition”或“IntegerDoubleAddition”我想用两个参数调用 Evaluate 方法。

最佳答案

您需要使用实际方法所需的名称和参数类型来创建 Method 对象。然后,您想要使用对具有该方法的对象的引用,并调用其上的 Method 引用。

//These are all the types that my example references will use.

Object obj; //The instance that my method is going to be invoked on.
Object[] params; //The parameters for my method
String nameOfMethod; //The name of my method.
Class<?>[] paramTypes; //The types, in order, that my method accepts as parameters

Method m = obj.getClass().getMethod(nameOfMethod, paramTypes); //Create my Method object

m.invoke(obj, params); //Invoke that method!

getMethod() 接受数组 paramTypes 的可变参数。因此,您可以直接将类型作为单独的参数一一列出。与 Method.invoke() 的 params 参数相同。

m.invoke(obj, param1, param2, param3) //etc

关于Java尝试进行反射(类实例并在运行时调用方法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22816104/

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