2011-09-02 91 views
0

我使用遺留庫並需要使用將對象轉換爲集合。 爲了避免異常,我想使用instanceof。 所以問題二: 1.如果我使用instanceof - 需要使用try .. catch拋出異常以避免異常? 2.它是否達到性能? 謝謝。使用instanceof幫助和java cast類型異常是否會影響性能?

+0

instanceof和cast的性能非常好。我發佈了一些Java7中的時間圍繞這個問題的不同方法:http://stackoverflow.com/questions/16320014/java-optimization-nitpick-is-it-faster-to-cast-something-and-let-it-it-投擲excep/28858680#28858680 – Wheezil

回答

5
  1. 如果使用instanceOf那麼你不需要try-catch(ClasscastException e)。即使有null s,instanceOf也能保證正常工作。

  2. 在當今的虛擬機中,鑄造不會顯示出任何可衡量的性能影響。相反,如果您發現過於頻繁投擲,那麼請重新訪問您的設計。

注意:instanceof由於類型擦除而不適用於泛型。

1

Instanceof對現代JVM中的性能沒有影響,任何影響都可以忽略不計。

這裏的an article on this subject與一些數字!

1

有時,在運行時知道對象的類型是很有用的,特別是在投射時。在Java中,無效轉換會導致運行時錯誤。編譯時會捕捉到許多無效的轉換。但是,涉及類層次結構的強制轉換可能會產生只能在運行時才能檢測到的無效強制轉換。 Java提供運行時操作員instanceof來回答這個問題。它沒有任何例外。 現代JVM/JIC編譯器已刪除的大部分性能損失傳統的「慢」業務,其中包括的instanceof,異常處理,反射等

請參閱this stackoverflow link

因此去的instanceof沒有任何擔心,但是你不能在收藏中使用它們,他們不在那裏工作。 java generics and instanceof

相關問題