This question already has answers here:
Is it possible to use the instanceof operator in a switch statement?
                                
                                    (23个答案)
                                
                        
                                3年前关闭。
            
                    
在搜索了SO和网络之后,我还没有找到Java的答案。很简单

我有抽象类ParentClass。 X类和Y类都继承自ParentClass。我还有类DataInputDialog extends JDialog,该类旨在提供用于将数据输入到X类和Y类实例中的用户界面。 DataInputDialog类如下所示:

public class DataInputDialog extends JDialog {

    public DataInputDialog(ParentClass xOrY) {
        //calls super constructor, makes basic components such as
        //  buttons and panels that are used in either X or Y data entry

    }
}


现在,我想要一个switch语句,该语句将确定将哪种类型的ParentClass传递给DataInputDialog。但是,我不知道如何实现这一目标。我试过了:

switch (xOrY.getClass().getTypeName()) {
    case X.class.getTypeName();
}


以及其他一些变体,但是case语句总是会出现错误,要么是:它必须是常量String,要么不能将其转换为整数。

如何获取此switch语句以确定xOrYX还是Y的实例?

最佳答案

为了使开关起作用,该值必须为a primitive value, a String or an Enum value
在OO代码中,switch语句有某种代码味道。通常表示您错过了使用多态的机会。

在功能语言中,您可能可以使用case语句执行您要尝试的操作。

Java是OO,所以我将利用多态性,您将拥有一个更简洁的设计。

多态性
OO概念是一种基本概念,即如果一个对象/类是另一个的超集,则可以将两个对象/类视为“ BE”。即,如果对象/类满足IS-A关系。
例如,如果您有一个Car类,则同时扩展FastCarVintageCarCarFastCar类都是VintageCar类,因此满足IS-A关系,因此它们可以可以在代码中可以调用Car的任何地方使用。
这里的含义是,如果Car存在,则Car...accelerate存在并且可以具有与FastCar.accelerate不同的特征,因此,在调用VintageCar.accelerate时,代码不需要知道子类型,而是将调用正确的accelerate方法。

10-07 12:59