簡體   English   中英

為什么首先投射到Closeable?

[英]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.

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