我很好奇爲什麼我們有@Overrides註釋,但是沒有類似的接口習慣用法(比如@Implements或@Implementation)。它似乎是一個有用的功能,因爲您可能要求您實現的接口是註釋的值。如果我們有@Override爲什麼沒有@Implementation或@ Implements`?
這是一個有意識的決定還是隻是一個被忽視的決定?
我發現這question,但它似乎沒有討論爲什麼沒有創建一個單獨的註釋。
我很好奇爲什麼我們有@Overrides註釋,但是沒有類似的接口習慣用法(比如@Implements或@Implementation)。它似乎是一個有用的功能,因爲您可能要求您實現的接口是註釋的值。如果我們有@Override爲什麼沒有@Implementation或@ Implements`?
這是一個有意識的決定還是隻是一個被忽視的決定?
我發現這question,但它似乎沒有討論爲什麼沒有創建一個單獨的註釋。
在大多數情況下,您不需要這樣的註釋,因爲如果您沒有實現接口,您將收到編譯時錯誤。唯一的情況是,如果班級是abstract
。在那裏它可以是有用的。但是,您再次擁有@Override
,所以新註釋可能無用。
如果在已實現的接口方法上使用@Override,如果該方法從接口中消失(這可能是需要更改實現的指示符),則會出現編譯錯誤。 – sarumont
,當你實現一個interface
(例如public class AClass implements AInterface
)我想,您使用的關鍵字implements
這是足夠的信息讓知道,即使您正在使用@Override
,該方法實際上是一個抽象方法的實現。
@Override
註釋僅僅是編譯器的標記。它的存在使得編譯器可以在開發人員的意圖可能混淆的情況下生成警告。 javadoc的內容如下:
指示方法聲明旨在覆蓋超類中的方法 聲明。如果使用此註釋類型註釋了方法但未覆蓋超類方法,則編譯器 需要生成錯誤消息。
任何@Implements
註釋可能只會提供相同的功能,所以它的實用程序將僅限於編譯器。
可能是因爲它不是什麼大事。 '@ Override'就足夠了。我想你可以寫自己的。 –
我也在想這個問題,但這取決於編譯器是如何實現的。如果您創建了自己的擴展@Override的註釋,編譯器是否也會檢查它? –
我認爲這是因爲Java傾向於是一種極簡主義語言,您添加的每個功能都可能會破壞向後兼容性。 –