gpt4 book ai didi

java - 句柄操作符的动态程序

转载 作者:行者123 更新时间:2023-11-30 07:59:21 26 4
gpt4 key购买 nike

我有一个处理数学运算符(+、*、-、/)的程序。我有一个接口(interface)运算符,它具有如下计算方法:

public interface Operator
{
double calculate(double firstNumber,double secondNumber);
}

我有四个类(Plus、Minus、Divide、Multiply),它们实现了 Operator 接口(interface),如下所示:

public class Plus implements Operator
{
public double calculate(double firstNumber,double secondNumber)
{
return firstNumber + secondNumber;
}
}

public class Minus implements Operator
{
public double calculate(double firstNumber,double secondNumber)
{
return firstNumber - secondNumber;
}
}

等等...

我使用 Map 来处理运算符:

static Map<String,Operator> operatorMap = new HashMap<String,Operator>();
static
{
operatorMap.put("+", new Plus());
operatorMap.put("-", new Minus());
operatorMap.put("*", new Multiply());
operatorMap.put("/", new Divide());
}

double output = operatorMap.get(op).calculate(firstNumber,secondNumber);

我应该像这样更改程序:

我有一个文件夹(myfolder)。每个人都可以获取接口(interface)并实现自己的运算符,并将.class文件放入myfolder中。我的程序也应该可以工作。这意味着对(+,*,-,/)的依赖应该删除从我的程序。例如,有人获取了 Operator 接口(interface)并实现了 % 并将 .class 文件放入我的文件夹中,我的程序仍然应该工作( map 实现必须更改)谁能帮我?我非常感激。

最佳答案

所以你的意思是你将为一个新的运算符创建一个新类,并且程序应该自动选择它。如果是这种情况,您可以使用 Reflection API迭代实现 Operator 接口(interface)的可用类。然后将它们添加到您的 map 中。

要删除对 hashmap 的依赖,您可以在 Operator 界面中添加一个新方法,如下所示:

public interface Operator
{
double calculate(double firstNumber,double secondNumber);
char getSign();
}

所有类(如 Plus、Minus)都将返回一个映射到其符号的字符。

public class Plus implements Operator
{
public double calculate(double firstNumber,double secondNumber)
{
return firstNumber + secondNumber;
}
public char getSign()
{
return '+';
}
}

接下来,在您的 calculate(char operator, int operand1, int operand2) 方法中,您可以首先迭代所有实现 Operator 接口(interface)的类(使用反射),然后调用 get Sign 并将其与传递给此方法的运算符参数,如果符号与运算符匹配,则将操作数传递给 Operator.calculate() 方法。要获取所有实现 Operator 接口(interface)的类,您可以使用以下代码:

Reflections reflections = new Reflections("mypackage");
Set<Class<? extends Operator>> classes = reflections.getSubTypesOf(Operator.class);

希望您现在明白了。

关于java - 句柄操作符的动态程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32174571/

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