Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取正确的子类实例无开关情况_Java_Oop_Optimization_Switch Statement_Polymorphism - Fatal编程技术网

Java 获取正确的子类实例无开关情况

Java 获取正确的子类实例无开关情况,java,oop,optimization,switch-statement,polymorphism,Java,Oop,Optimization,Switch Statement,Polymorphism,我正在尝试制作一个小型计算器应用程序并学习OOPS概念。我看着。 它展示了如何使用多态性来避免switch语句 我的应用程序中有4个操作员按钮(+,-,/,*)。我对运算符和操作数使用两个堆栈 当用户点击任何按钮操作数或运算符时,我尝试为当前表达式创建中缀树,并将运算符保留在运算符堆栈中。 当用户点击“计算”时,我将遍历操作符堆栈,并根据操作符优先级调整中缀树 我有抽象的节点类、值节点->节点、抽象运算符节点、AddNode->operatorNode、subtract节点->运算符节点等等 如

我正在尝试制作一个小型计算器应用程序并学习OOPS概念。我看着。 它展示了如何使用多态性来避免switch语句

我的应用程序中有4个操作员按钮(
+
-
/
*
)。我对运算符和操作数使用两个堆栈 当用户点击任何按钮操作数或运算符时,我尝试为当前表达式创建中缀树,并将运算符保留在运算符堆栈中。 当用户点击“计算”时,我将遍历操作符堆栈,并根据操作符优先级调整中缀树

我有抽象的
节点
类、
值节点
->
节点
、抽象运算符节点、AddNode->operatorNode、
subtract节点
->
运算符节点
等等

如果上面的描述不清楚,我的代码是从下面的链接中得到启发的。

我的问题是,在不使用开关的情况下,如何基于堆栈中的运算符char创建正确的子类对象


因此,给定char(
+
-
*
/
)我如何在不使用开关的情况下创建
AddNode
SubtractNode

您可以创建从操作员到创建正确实例的工厂的映射。这样你:
1.避免开关
2.添加新操作数时,避免必须更新树创建,只需在映射中注册它们即可


映射中不存在的任何内容都可以假定为操作数(常量或变量)

而不是描述代码,请将其发布。这将更容易理解和帮助你。格雷西亚斯,我的朋友。