簡體   English   中英

從接口到實現類的轉換的性能開銷

[英]Performance overhead of casting from interface to implementation class

假設我有一個接口Vehicle和實現Car Car類具有一個名為getNumberCylinders()的方法,該方法不屬於Vehicle接口。 因此,在我的代碼中,我需要將Vehicle實例強制轉換為Car類,以調用此方法。

與將這種方法包含在接口中並直接在不進行強制轉換的情況下直接調用該方法相比,這種強制轉換會帶來性能開銷嗎?

與將這種方法包含在接口中並直接在不進行強制轉換的情況下直接調用該方法相比,這種強制轉換會帶來性能開銷嗎?

在這種情況下,是的,因為對象可能不是Car,所以Java必須進行運行時檢查,這就是拋出ClassCastExceptions的方式。 JVM規范#2.6.8。

如果必須執行此類操作,則通常在設計階段就做錯了。 我會重新考慮您的對象模型。

如果您認為所有車輛都應具有“汽缸數”,那么最好將該方法添加到“車輛”界面中。 否則,鑄造完全可以。 在運行時,強制轉換完全不會修改您的對象。 轉換與編譯檢查有關。 盡管Java規范本身不保證它將是0納秒的操作,但是由於強制轉換操作,沒有關於性能開銷的明顯報告。 在我的應用程序中,我將更多地擔心不必要的數據庫命中和對象創建,而不僅僅是類型轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM