可以使用switch语句来确定对象的类吗?

cor*_*fon 1 java class switch-statement

在搜索了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

    }
}
Run Code Online (Sandbox Code Playgroud)

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

switch (xOrY.getClass().getTypeName()) {
    case X.class.getTypeName();
}
Run Code Online (Sandbox Code Playgroud)

还有其他一些变体,但它总是在case语句中出现一个错误:它必须是一个常量String,或者它不能转换为整数.

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

Gav*_*vin 8

要使开关工作,该值必须是原始值,String或Enum值.在OO代码中,switch语句具有代码味道; 通常表明你错过了使用多态的机会.

在函数式语言中,您可以使用case语句来执行您正在尝试的操作.

Java是OO所以我会利用多态性,你会有一个更清洁的设计.

多态性 是一个OO概念,基本上说如果一个是另一个的超集,那么两个对象/类可以被认为是"BE"相同.也就是说,如果对象/类满足IS-A关系.例如,如果你有一个Car类,FastCar并且VintageCar该扩展类CarFastCarVintageCarCar类和因此满足IS-A的关系,因此它们可用于在代码中的任何地方,其中Car可以被调用.这里的含义是,如果Car...accelerate存在然后FastCar.accelerate存在并且可以具有不同的特征,VintageCar.accelerate因此当调用accelerate代码不需要知道子类型但将调用正确的accelerate方法时.