是否可以使用switch并具有不同的子类?我想使用switch而不是几个if语句。我有一个名为指令的抽象类和具有不同类型的子类。所以我希望每个案例都是一个不同的子类。喜欢:
switch (instruction){
case instruction1:
case instruction2:
case instruction3:
}
等 因为所述指令1,2,3是同一类的子类。
答案 0 :(得分:6)
不,切换仅适用于数值和枚举。 (在Java 7中,它也适用于字符串。)
听起来你应该在不同的子类中覆盖一个方法......或者可能使用枚举(它仍然可以覆盖方法)。
如果这没有帮助,请提供有关您尝试做的更多信息 - 最好是举例。
答案 1 :(得分:4)
看起来你想要使用运行时多态。
只需在对象上调用一个方法,并在每个子类中以不同方式实现它。
答案 2 :(得分:0)
不,在Java中,您只能使用整数作为切换条件(编辑:和使用enums
的{{1}})。您正在寻找的解决方案(而不是令人讨厌的ordinal()
包含大量if-else
运算符)是Visitor pattern。
答案 3 :(得分:0)
扩展Jon的响应:在Java枚举中是对象,因此可能能够通过使用枚举来实现您尝试做的事情,具体取决于它是什么。也就是说,它可能不是一个非常优雅的方法。
答案 4 :(得分:0)
另一种可能性(某种程度上是黑客攻击)是在超类中创建一个枚举,以及一个抽象方法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;
//...
}