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。我还有类
现在,我想要一个
以及其他一些变体,但是case语句总是会出现错误,要么是:它必须是常量String,要么不能将其转换为整数。
如何获取此switch语句以确定
(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语句以确定
xOrY
是X
还是Y
的实例? 最佳答案
为了使开关起作用,该值必须为a primitive value, a String or an Enum value。
在OO代码中,switch语句有某种代码味道。通常表示您错过了使用多态的机会。
在功能语言中,您可能可以使用case语句执行您要尝试的操作。
Java是OO,所以我将利用多态性,您将拥有一个更简洁的设计。
多态性
OO概念是一种基本概念,即如果一个对象/类是另一个的超集,则可以将两个对象/类视为“ BE”。即,如果对象/类满足IS-A关系。
例如,如果您有一个Car
类,则同时扩展FastCar
和VintageCar
的Car
和FastCar
类都是VintageCar
类,因此满足IS-A关系,因此它们可以可以在代码中可以调用Car
的任何地方使用。
这里的含义是,如果Car
存在,则Car...accelerate
存在并且可以具有与FastCar.accelerate
不同的特征,因此,在调用VintageCar.accelerate
时,代码不需要知道子类型,而是将调用正确的accelerate
方法。
10-07 12:59