实例是否被视为不良做法?如果是这样,在什么情况下实例仍然更可取?

2022-08-31 13:43:10

多年来,我一直试图尽可能避免。在适用的情况下使用多态性或访客模式。我想它只是在某些情况下简化了维护...人们应该注意其他缺点吗?instanceof

然而,我确实在Java库中到处看到它,所以我想它有它的位置?在什么情况下更可取?这是不可避免的吗?


答案 1

它绝对在 股票实现 中占有一席之地。例如:equals

public boolean equals ( Object o )
{
  if ( this == o )
  {
     return true;
  }

  if ( ! (o instanceof MyClass) )
  {
    return false;
  }

  // Compare fields
  ...
}

关于实例的一个巧妙的事情是,它的LHS可以是,在这种情况下,表达式的计算结果为。nullfalse


答案 2

我可以想象一些情况,例如,您有一个库的一些对象,您无法扩展(或者这样做会很不方便),也许与您的某些对象混合在一起,所有这些都具有相同的基类,一起在一个集合中。
我认为在这种情况下,使用 instanceof 来区分对这些对象的一些处理可能是有用的。

Idem在一些遗留代码的维护中,你不能在许多旧类中注入一些新行为,只是为了添加一个新的小功能或一些错误修复......