[英]Why cast to Closeable first?
在閱讀一些Java源代碼時,我遇到了這一行:
((Closeable) some_obj).close();
some_obj顯然是實現Closeable接口的類的實例。 我的問題是,為什么他們在調用close()之前首先將some_obj強制轉換為Closeable。 我不能這樣做
some_obj.close();
假設some_obj
的編譯時類型實現了Closeable
,那么是的,你可以。
如果你有一個你知道實現的對象是Closeable
,但是編譯時類型更通用(最明顯的例子是Object
)或者“不同”(例如不同的接口), 你只需要這個。
正如感興趣的事情,在C#強制轉換為一個接口類型可以有所作為,即使編譯時類型是已知的實現接口,由於顯式接口實現。 如果有人關心,我可以提供更多細節,但我只是想把它扔出去。
如果變量some_obj
的已知編譯時類型包含方法close()
, some_obj
yes。
這聽起來像是沒有必要進行類型轉換。 (您可以通過嘗試編譯具有所謂的冗余類型轉換的類來確認這一點。)
我們可能永遠不知道為什么代碼是這樣編寫的。 它可能會遺留在代碼的前一個版本中,其中聲明的some_obj
類型不同。 可能是開發人員有一些風格問題......
雖然如果刪除了多余的強制轉換,它(可能)代碼會提高可讀性,但它實際上並沒有造成任何傷害。 我希望Java編譯器或JIT編譯器能夠優化它。 即使它沒有,多余的類型轉換的成本很可能是微不足道的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.