假設我有一個名為Devil
class Devil
我已經呼叫了方法support
fun <T> support(t : T){
}
我想將此功能限制為僅接受除Devil(世界上所有類,但不是Devil)以外的類。就像是
fun <T except Devil> support(t : T){
}
- 我如何在 Kotlin 中做到這一點?這甚至可能嗎?
uj5u.com熱心網友回復:
這很可能是 XY 問題,因此請不要在未考慮其他問題的情況下應用此解決方案。
support()實作此目的的一種方法是使用顯式型別宣告非泛型多載Devil,并使用 level 棄用該函式ERROR:
fun <T> support(t: T) {
// do your stuff
}
@Deprecated("support() cannot be used with type Devil", level = DeprecationLevel.ERROR)
fun support(devil: Devil) {
error("NOPE.")
}
請注意,這也將排除子型別Devil- 為什么在您的問題中未明確說明,但可能是您想要的。
但是,沒有什么能阻止用戶通過在 中指定型別來顯式呼叫泛型多載來解決它<...>:
support<Devil>(Devil()) // compiles fine
support<Any>(Devil()) // compiles fine
Devil同樣,正如@gidds 指出的那樣,如果您傳入一個靜態型別的變數,即使它擁有一個實體,這種方法也不會阻止編譯Devil(因為在這種情況下編譯器將選擇泛型多載):
val hiddenDevil: Any = Devil()
support(hiddenDevil) // compiles fine
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/439666.html
