我需要線性函數是這樣的:科特林:通用於不同類型的
class Linear(val a : Double, val b : Double) {
fun eval(in : Double) {
return a*in + b
}
}
然後,我需要爲載體同樣的事情。
class Vector3d(val a1 : Double, val a2 : Double, val a3 : Double) {
// use operator overloading https://kotlinlang.org/docs/reference/operator-overloading.html to make +, -, /, *, etc. possible for vectors
}
class Linear(val a : Vector3d, val b : Vector3d) {
fun eval(in : Vector3d) {
return a*in + b
}
}
如您所見,兩個線性類是相同的(參數類型除外)。現在,我不能讓類是泛型的,因爲Double和Vector3d沒有共同的超類。
如果我只想寫一次Linear,我唯一的選擇是我自己的Double-type,它與Vector3d有一個共同的接口。但是,這意味着我無法再在源代碼中使用0,但我必須在任何地方都使用MyDouble(0)。我可以重載Linear的構造函數來接受Doubles,並在內部創建MyDouble對象,但是,我需要爲我的API中的每個方法執行此操作。
有沒有更好的解決方案?
你不顯示'Vector3d'如何支持'*'和'+'操作。你一定需要一個共同的父類/接口,否則你就會陷入不受約束的泛型。 – m0skit0