我正在做kotlin portgli,现在被卡住了

其实我有以下
open class Texture
扩展了几个类,例如Texture2d
现在,Texture具有很多特性

protected val storage: StorageLinear?
protected val target: Target
protected val format: Format
protected val baseLayer: Int
protected val maxLayer: Int
protected val baseFace: Int
protected val maxFace: Int
protected val baseLevel: Int
protected val maxLevel: Int
protected val swizzles: Swizzles

因此,我想将其作为data类,以便利用其随附的equals()

但不幸的是dataopen不兼容。。(请参阅question)

我可以解决它的一种方法,我可以编写自己的equals()方法,但这将是样板代码且很脏,这正是我通过Java切换到kotlin的两个最大原因

另一种方法是,由于所有扩展classTexture并没有真正添加任何内容,因此它们充当某种生成器(看起来是cpp Texture2d class),是否会将它们用作..生成器(请参见Kirill的this excellent answer)

但是由于没有什么免费的,所以此解决方案的最大缺点是,我不会失去将Texture2d作为类,而Texture2d具有不错的operator [] 来检索纹理的单个图像的可能性。

由于Kotlin社区看起来非常活跃和支持,所以我想知道您是否有更好的主意。

最佳答案

恕我直言,最实用的解决方案是在equals中生成Texture并完成此操作。

数据类在用途上有非常狭窄的应用。您的示例确实不适合经典的data类,这就是您遇到此问题的原因。

关于inheritance - 数据和开放式不兼容,我有哪些选择?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40328626/

10-10 18:43