在 Kotlin 中有什么方法可以将自定义函数添加到接口内的 属性 吗?

Is there any way in Kotlin to add a custom function to a property inside an interface?

最终我想做的是有一个 class,里面有一个我可以调用函数的字段。我已经尝试过扩展函数,但它只扩展了字段定义为的 class 定义。我尝试在界面中执行此操作,但最终以标准函数调用结束。

所以,

private interface Geometric{


    var position: Float3
        get() { return position }
        set(value) {
            this.dirty = true
            this.position = value
        }

    fun TransformationMatrix() =
        floatArrayOf(1f, 0f, 0f, 0f,
                     0f, 1f, 0f, 0f,
                     0f, 0f, 1f, 0f,
                     this.position.x, this.position.y, this.position.z, 1f) 

这让我可以做到

  val translationMatrix = myobject.TransformationMatrix()

但我真正想做的是

  val translationMatrix = myobject.position.toTransformationMatrix()

我知道我可以编写一个继承自 float3 的名为 position 的 class,但我的对象 class 实际上是唯一 class 将使用它的

data class Object(val objectName: String, val meshName : String,
              override var position : Float3 = Float3(0f,0f,0f),
              override var rotation: Quaternion = Quaternion(0f,0f,0f, 1f),
              override var scale: Float3 = Float3(1f,1f,1f)
) : Geometric, OpenGLObject, GameObject/*Color*/

如你所见,我为四元数写了一个特殊的 class,因为它有一个采用欧拉角的辅助构造函数,否则我也希望它只是一个具有旋转功能的 Float4 returns float4 支持字段作为旋转矩阵。

基本上,这里的想法是让数据 class 尽可能轻,然后只要求它保存在我需要的甲酸盐中的数据。 position.toMatrix4(), rotation.toMatrix(), ext.

有什么方法可以使用对象或其他一些很酷的 Kotlin 东西来实现这个目标吗?

我觉得你很幸运。 kotlin 中有一个名为 inline class 的新实验性 Future,我认为这正是您所需要的。
inline class 用作类型的包装器!

inline class Position(val pos: Float3 ) {

    fun transformationMatrix() = ... 
}

你可以像

一样使用它
val pos = Position(f3)
pos.transformationMatrix()

并且您无需担心不重用它或任何开销,因为在运行时变量 pos 仅转换为 f3 并且其类型将是 Float3 并且会有是没有迹象的class.

请不要以大写字母开头您的函数名称!!