Java:instanceof或自定义getType

Luk*_*lor 2 java instanceof

假设我有以下代码:

public boolean doesElfLikeIt ( Monster mon )
 {
    if ( mon instanceof Orc ) { return false; }
    if ( mon instanceof Elf ) { return true; }

 }
Run Code Online (Sandbox Code Playgroud)

这是一个很好的编程方法还是我应该选择这样的东西:

public boolean doesElfLikeIt ( Monster mon )
 {
    if ( mon.getType() == Orc.type ) { return false; }
    if ( mon.getType() == Elf.type ) { return true; }

 }
Run Code Online (Sandbox Code Playgroud)

我问这个的原因是因为我听到很多关于instanceof比较有多邪恶,但我发现它很有用.

Rev*_*nzo 8

都不是.你真正应该做的是:

class Monster {
  public abstract boolean likesElves();
}

class Orc extends Monster {
  public boolean likesElves() {
    return false;
  }
}

class Elf extends Monster {
  public boolean likesElves() {
    return true;
  }
}
Run Code Online (Sandbox Code Playgroud)