小编Far*_*ell的帖子

是否可以避免在此示例中使用类型检查?

对不起这个糟糕的头衔,想不出一个简洁的方式把这个..

我正在考虑拥有一个对象列表,这些对象都是特定的接口.然后,这些对象中的每一个都可以实现其他接口,但是不能保证哪个对象将实现哪个.但是,在单个循环中,我希望能够调用其进一步子类型的方法.

即3个接口:

public interface IAnimal { ... }
public interface IEggLayer { public Egg layEgg(); }
public interface IMammal { public void sweat(); }
Run Code Online (Sandbox Code Playgroud)

然后将其存储为

private List<IAnimal> animals= new ArrayList<IAnimal>();
Run Code Online (Sandbox Code Playgroud)

因此,添加到列表中的实例也可能是类型,IEggLayer或者IMammal具有完全不相关的方法.

我最初的本能就是这样做

for(IAnimal animal : animals) {
  if(animal instanceof IEggLayer) {
    egg = ((IEggLayer)animal).layEgg();
  }
  if(animal instance of IMammal) {
    ((IMammal)animal).sweat();
  }
}
Run Code Online (Sandbox Code Playgroud)

但我总是被告知类型检查是代码应该真正被重构的标志.

由于单个对象可能同时执行[platypus],意味着单个doFunction()不适合这种情况,在这种情况下是否可以避免使用类型检查,或者这是一个类型检查是被归类为可接受的?
是否有可能迎合这种设计模式?

我为这个人为的例子道歉...
[忽略任何语法错误,请 - 它只是为了类似Java的伪代码]

我已经为EggLayer使用添加了左值,以表明有时返回类型很重要

java interface typechecking

5
推荐指数
2
解决办法
929
查看次数

标签 统计

interface ×1

java ×1

typechecking ×1