【问题标题】:Replace If/Else using polymorphism in Java在 Java 中使用多态性替换 If/Else
【发布时间】:2020-03-31 04:55:21
【问题描述】:

我想从我的代码中删除许多 if/else 条件。我选择多态来代替它。我已经理解了方法。我正在复制我在互联网上找到的来源。

abstract class Bird {
  // ...
  abstract double getSpeed();
}

class European extends Bird {
  double getSpeed() {
    return getBaseSpeed();
  }
}
class African extends Bird {
  double getSpeed() {
    return getBaseSpeed() - getLoadFactor() * numberOfCoconuts;
  }
}
class NorwegianBlue extends Bird {
  double getSpeed() {
    return (isNailed) ? 0 : getBaseSpeed(voltage);
  }
}

// Somewhere in client code
speed = bird.getSpeed();

我对上面的设计很满意。 但我的疑问是,如果鸟对象的实例化取决于另一个 if/else 条件。那么如何解决呢?我很困惑。请原谅我。这可能很琐碎。 例如

if (LocalDateTime.now().getMonth().toString().equalsIgnoreCase("march")) {
    Bird aBird = new European();
} else if (LocalDateTime.now().getMonth().toString().equalsIgnoreCase("August")) {
    Bird aBird = new African();
}
speed = aBird.getSpeed();

请让我知道我该如何消除这个 if/else。

【问题讨论】:

  • 很大程度上取决于程序的要求,目前我们还不太了解。在不相关的说明中,出于某种原因,我确实对您的班级名称有亲和力
  • 你能告诉我你指的是什么类型的要求吗?我们可以假设我们的要求是从几只鸟中获得鸟的速度。但是鸟只在一年中的某些月份出现。我希望我能满足要求
  • 既然您要创建对象,就会想到工厂设计模式。
  • 这个应该有帮助!谢谢..让我试试看! stackoverflow.com/questions/3314333/…
  • @HovercraftFullOfEels 但是在地面上应该有一些 if/else 就像工厂的例子一样。如果我错了请纠正我

标签: java if-statement polymorphism


【解决方案1】:

你必须使用 if/else 因为构造函数只对实现的类起作用

你可以像这样做得更好:

Bird aBird = null;
String month = LocalDateTime.now().getMonth().toString();
if ("march".equalsIgnoreCase(month)) {
    aBird = new European();
} else if ("August".equalsIgnoreCase(month)) {
    aBird = new African();
}
speed = aBird.getSpeed();

工厂的实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 2014-11-29
    相关资源
    最近更新 更多