私はKotlinとジェネリック医薬品、ジェネリック配列で実装する抽象ジェネリッククラス
abstract class Vec2t<T : Number>(open var x: T, open var y: T)
が
data class Vec2(override var x: Float, override var y: Float) : Vec2t<Float>(x, y)
によって実装以下の抽象クラスは、これまでのところ、すべてがうまく機能してい
今、行列についても同様のことをしたいと思っています。これは現時点では私のabstですRACTクラス
class Mat2(override var value: Array<Vec2>) : Mat2t<Float>(value)
しかし、コンパイラArray<Vec2>
に文句を言いによって実装されなければならない
:
Error:(8, 32) Kotlin: Type of 'value' doesn't match the type of the overridden var-property 'public open var value: Array> defined in main.mat.Mat2t'
私は言われた:
var
プロパティのタイプを変更することはできません(実際には変更していないので、サブタイプでオーバーライドしています。同じことですか?)mat2.value = object : Vec2t<Float>() { ... }
任意のサブクラスに該当してはならないMat2t<Float>
どのようにこれらの問題を解決できますか?
抽象汎用クラスMat2t
に汎用配列を持たせ、それをサブタイプ配列で実装する方法はありますか?あなたがあなたをvar value
をオーバーライドしているよう
abstract class Mat2t<T : Vec2t<*>>(open var value: List<T>)
class Mat2(override var value: List<Vec2>) : Mat2t<Vec2>(value)
なお:
それは動作しますが、素敵。私はあなたが 'Array'を介して' List'を使ったのを見ます。共分散を得るには?参考までに、私は[this](https://github.com/g-truc/glm/blob/master/glm/detail/type_mat2x2.hpp)のポートを開こうとしています。インターフェイスについてのヒントは、+1 – elect
@elect私が推測する習慣。私は 'Array'を使うことはほとんどありません。また、 'Vec2'が'データクラス 'であることがわかります。これは、' Mat2'を 'データクラス 'にしたいと思うかもしれないと信じさせています。この場合、もしあなたが' equals'と 'hashCode'を'Array'を使用しています(実装していません)が、' List'を使用すると、コンパイラがそれを処理します。 http://stackoverflow.com/q/36262305/3255152も参照してください。 – mfulton26
FYI:あなたが何をしているのかは分かりませんが、さまざまな線形代数/行列のJavaライブラリがあります:http://stackoverflow.com/questions/10815518/java-matrix-librariesたぶんそれらのうちの1つは、あなたのユースケースを既に満たしています。そうでないかもしれない。楽しい! – mfulton26