我想創建一個抽象類與泛型參數,它將有子類應調用方法而不必指定類型參數。 我有這個至今:Kotlin抽象類與泛型參數和使用類型參數的方法
abstract class AbstractClass<T : Any> @Autowired constructor(protected val delegate: MyService) {
inline fun <T: Any> myMethod(param: Any): T? {
return delegate.myMethod(param).`as`(T::class.java)
}
}
與實現
class TesterWork @Autowired constructor(delegate: MyService) : AbstractClass<Tester>(delegate) {
}
現在呼籲myMethod
當我有指定類型參數:
testerWork.myMethod<Tester>("test")
我想知道這將是可能的自動推斷類型參數? 我可以以某種方式重寫myMethod嗎?請注意,我需要在方法內有T::class.java
。
感謝您的回答!我有點困惑,爲什麼不能類泛型參數連接到方法泛型參數。當子類被創建時,我們知道泛型類型,爲什麼我們不能在抽象類中使用它作爲「T類型」?爲什麼我們必須重新指定類型? – NikolaB
@NikolaB,當你爲**類和它的方法添加一個泛型參數時,那些將是不相互連接的不同參數,這就是我的意思。否則,你肯定可以在函數中使用該類的泛型參數。至於抽象類,JVM上的泛型以不同的方式工作:對於每個派生類,方法代碼不會被複制,因此在派生類中指定具體類型代替泛型參數將無濟於事:方法的代碼是仍然在基類中,然後泛型將從其中刪除。 – hotkey
@NikolaB,可能是閱讀* https://en.wikipedia.org/wiki/Generics_in_Java中的type erasure *部分會使事情更加清晰。 – hotkey