public class Main {
public static void main(String[] args) {
DataStructure s = new DataStructure();
Input in = new Input();
Data x = null;
while ((x = in.readNext()) != null) {
if (x instanceof InsertData) {
s.insert((InsertData)x);
} else if (x instanceof QueryData) {
System.out.println(s.query((QueryData)x));
}
}
}
}
Input
读取用户输入并使用方法 Data readNext()
以 Data
的形式返回。
Data
可以是 InsertData
或 QueryData
(它们也有不同的字段,即要插入的数据形式与查询不同)。
我想做的是读取Data
并对DataStructure s
执行插入/查询,具体取决于Data
的类型由 readNext()
返回。
上面的代码是我针对这个问题的简单解决方案,但它使用转换和instanceof,这不是一个很好的编码风格。您能提出更好的解决方案吗?
我想到的另一个解决方案是在Data
中使用一个方法void PerformAction(DataStructure s)
,该方法将被InsertData
覆盖/QueryData
并对DataStructure
执行相应的操作,但我认为它不必要地将DataStructure
与Data
绑定(bind),这不会'也不是一个好的风格。意思是,我想将输入和执行操作分开,因为读取数据和用数据做一些事情是不同的事情。
最佳答案
将方法 performAction(Data)
添加到类 DataStructure
。
然后将抽象方法performOperation()
添加到类Data
中。
重写 InsertData
类和 QueryData
类中的 performOperation()
方法。
DataStructure
类中的方法 performAction(Data)
如下所示:
public void performAction(Data x) {
x.performOperation();
}
你的while
循环(在你的方法main()
中)将是:
while ((x = in.readNext()) != null) {
s.performAction(x);
}
关于java - 根据输入类型做出决策,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61557395/