我正在做kotlin port的gli,现在被卡住了
其实我有以下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()
。但不幸的是
data
和open
不兼容。。(请参阅question)我可以解决它的一种方法,我可以编写自己的
equals()
方法,但这将是样板代码且很脏,这正是我通过Java切换到kotlin的两个最大原因另一种方法是,由于所有扩展
class
的Texture
并没有真正添加任何内容,因此它们充当某种生成器(看起来是cpp Texture2d
class),是否会将它们用作..生成器(请参见Kirill的this excellent answer)但是由于没有什么免费的,所以此解决方案的最大缺点是,我不会失去将
Texture2d
作为类,而Texture2d
具有不错的operator []
来检索纹理的单个图像的可能性。由于Kotlin社区看起来非常活跃和支持,所以我想知道您是否有更好的主意。
最佳答案
恕我直言,最实用的解决方案是在equals
中生成Texture
并完成此操作。
数据类在用途上有非常狭窄的应用。您的示例确实不适合经典的data
类,这就是您遇到此问题的原因。
关于inheritance - 数据和开放式不兼容,我有哪些选择?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40328626/