2016-09-21 33 views
8

如果我有下面的類層次結構:科特林摘要受保護的屬性

abstract class Foo<out T : Bar>() { 
    abstract protected val thing: T 
} 

class Baz : Foo<BarImpl> { 
    override protected val thing: T = ... 
} 

我得到巴茲::件事警告說:

冗餘知名度修改

這是否意味着編譯器將它視爲受保護而不需要指定,或者它必須公開?

回答

7

在Kotlin中,您將收到一個IDE檢查樣式警告,例如您不需要的額外分號,額外的通用類型參數以及更多。您的冗餘可見性修改器沿着相同的路線。

如果展開檢查的消息,你會看到全文:

這場比賽的元素的默認可見性(公共大多數元素,保護的成員覆蓋一個受保護的部件,其檢驗報告的可視性修飾符)。

如果您不再看到它,可以在IDE內關閉檢查。這個

一些更多的注意事項:

當重寫的祖先類,你已經在同級別的訪問被宣佈作爲時的方法或成員。說protected是明顯的(編譯器知道它是protected)。

如果需要,您可以再次重新訪問訪問修飾符。你可以通過將其更改爲public來打開它。但是你不能進一步限制它,例如去private(因爲如果它是私人的,你怎麼能覆蓋它,這個想法是不符合override),這成爲一個編譯器錯誤。