2011-08-11 55 views
12

我有一個對象。我想檢查它是否是枚舉類型。有兩種方法可以做到這一點。使用class.isEnum()或instanceof Enum更好嗎?

object.getClass().isEnum() 

object instanceof Enum 

是一個更好?

+2

「更好」是指「更容易閱讀」,「跑得更快」等。 – templatetypedef

+0

@templatetypedef大部分表現更容易閱讀。 –

+0

如果你需要確定一個對象是否是Enum,那麼你應該問的問題是「爲什麼我使用這個可怕的設計」。 – DwB

回答

20

在我看來object instanceof Enum有幾個原因是更好:

  • 這是很明顯的東西在這裏問:「這是一個枚舉」?
  • 它沒有風險NullPointerException(如果objectnull,它只會評估爲false
  • 這是短。

我會看到使用isEnum()是,如果我只能訪問到Class對象,而不是一個具體的實例的唯一原因。

+0

+1關於NPE。我現在正在做這個循環,不知道它是否會影響 –

+1

就性能而言,'instanceof'的工作速度也很快(它根據所測試的類而變化,但對於我所有的測試來說,至少比isEnum快33%,最快快450%)。 isEnum:2691826 instanceof:658774 – ty1824

+0

@ ty1824 - 真棒。數據是我正在尋找的確切的東西 –