在子类上使用switch?

| 是否可以使用switch并具有不同的子类?我想使用switch而不是几个if语句。我有一个称为指令的抽象类和具有不同类型的子类。所以我希望每种情况都是不同的子类。喜欢 :
switch (instruction){
    case instruction1:
    case instruction2:
    case instruction3:
}
等等 如所述的指令1、2、3是相同类别的子类别。     
已邀请:
不,开关仅适用于数值和枚举。 (在Java 7中,它也适用于字符串。) 听起来您可能应该在不同的子类中覆盖一个方法...或可能使用枚举(仍然可以覆盖methosds)。 如果这样做没有帮助,请提供有关您要执行的操作的更多信息-理想情况下提供示例。     
看来您想改用运行时多态。 只需在对象上调用一个方法,然后在每个子类中以不同的方式实现它。     
另一种可能性(有点骇人听闻)是在超类中创建一个枚举,并创建一个抽象方法getEnum(),该方法将由每个子类实现。然后,每个子类将为枚举返回不同的实例。如:
abstract class Super
{
enum Type {ONE, TWO, THREE};

abstract Type getType();
}

public class ChildOne extends Super
{
public Type getType()
{
return Type.ONE;
}
}

public class ChildTwo extends Super
{
public Type getType()
{
return Type.TWO;
}
}
然后,您可以执行以下操作:
Super someClass;
switch(someClass.getType())
{
case ONE:
//domSomething
break;

case TWO:
//domSomeOtherThin
break;
//...
}
    
不,在Java中,您只能使用整数作为切换条件(编辑:和
enums
,其中使用
ordinal()
)。您正在寻找的解决方案(而不是讨厌的
if-else
拥有许多
instanceof
运算符)是“访客”模式。     
扩展Jon的响应:在Java中,枚举是对象,因此您可能可以通过使用枚举来实现您要尝试执行的操作,具体取决于确切的含义。也就是说,这可能不是一个非常优雅的方法。     

要回复问题请先登录注册