gpt4 book ai didi

Java 在 else if 之后需要 else 吗?另外,你需要参加扩展类(class)吗?

转载 作者:行者123 更新时间:2023-12-01 07:36:56 24 4
gpt4 key购买 nike

我有以下代码。为什么这有效?选角有必要吗?

static public Food createMeal(Food f)
throws Exception
{

if (f instanceof Bread)
{
return (Bread) f;
}
else if (f instanceof Meat)
{
return (Meat) f;
}
else if (f instanceof Milk)
{
return (Milk) f;
}

throw new Exception("NotAFood!");
}

最佳答案

不,向下转型是不必要的,并且实际上是无操作的:

  1. instanceof 检查确保向下转型不会失败;
  2. 每个向下转换的引用都会立即通过 return 语句向上转换回 Food

该函数可以写得更紧凑,如下所示:

  static public Food createMeal(Food f) throws Exception {
if ((f instanceof Bread) || (f instanceof Meat) || (f instanceof Milk)) {
return f;
} else {
throw new Exception("NotAFood!");
}
}

话虽如此,在条件语句中使用 instanceof 通常是糟糕设计的标志。想象一下添加一个新的 Food 子类。现在,您必须重新访问代码中以这种方式使用 instanceof 的每个位置,并进行适当的修改。

更好的设计是在基类中定义合适的虚函数,并在派生类中重写它。

关于Java 在 else if 之后需要 else 吗?另外,你需要参加扩展类(class)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10654734/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com