2017-08-11 116 views
0

下面的類結構:參考泛型類型在科特林

abstract class GenericClass<T: Fragment> { 
    protected lateinit var fragment: T 

    fun anOperation(){ 
    //do something 
    } 
} 

class ConcreteA: GenericClass<AFragment> { 

} 

class ConcreteB: GenericClass<BFragment>{ 
} 

我怎樣才能做到這一點?

fun useFragment(f:GenericClass){ 

    f.anOperation() 

} 

當我宣佈useFragment功能我得到 「One type argument expected for class GenericClass

回答

3

你給的方法自身的類型參數:

fun <T> useFragment(f: GenericClass<T>) { 
    f.anOperation() 
}

的通知後<T>fun

Kotlin沒有原始類型,所以你需要來爲GenericClass指定一個通用類型。您也可以使用通配符:

fun useFragment(f: GenericClass<*>) { 
    f.anOperation() 
} 

在這種情況下,沒有區別。

另外,您問題中的繼承無效 - GenericClass是最終的類,不能擴展。您應該將open修飾符添加到GenericClass

您甚至可以將它製作成abstract,因爲它看起來不像應該單獨使用。

+0

不錯的解釋 –