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读取用户输入,并使用方法DataData readNext()形式返回用户输入。

Data可以是InsertDataQueryData(它们也具有不同的字段,即,要插入的数据形式不同于查询)。

我想做的是读取Data并在DataStructure s上执行插入/查询,具体取决于Data返回的readNext()类型。

上面的代码是我针对此问题的简单解决方案,但它使用的转换和instanceof并不是很好的编码风格。您能提出更好的解决方案吗?

我想到的另一个解决方案是在void performAction(DataStructure s)中具有方法Data,该方法将被InsertData / QueryData覆盖,并对DataStructure执行perfom相应的操作,但是我认为它将不必要地将DataStructureData,这也不是一个好的样式。意思是说,我想分开输入和执行操作,因为读取数据和使用数据做些不同的事情。

最佳答案

将方法performAction(Data)添加到类DataStructure
然后将抽象方法performOperation()添加到类Data
覆盖类performOperation()和类InsertData中的方法QueryData
performAction(Data)中的方法DataStructure如下所示:

public void performAction(Data x) {
    x.performOperation();
}


并且您的while循环(在您的方法main()中)将是:

while ((x = in.readNext()) != null) {
   s.performAction(x);
}

10-06 05:41