Я делаю порт kotlin для 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
несовместимы.. (см. этот вопрос)
Один из способов, которым я могу это решить, я мог бы написать свой собственный метод equals()
, но это был бы шаблонный код и грязный, ровно две из самых больших причин, по которым я переключился на kotlin вместо java.
С другой стороны, поскольку все class
es, расширяющие Texture
, на самом деле ничего не добавляют, они действуют как строители (выглядит cpp Texture2d
class), будет ли это использование их в качестве... строителей (см. отличный ответ от Кирилла)
Но поскольку ничего не дается бесплатно, большим недостатком этого решения является то, что я потеряю возможность иметь Texture2d
в качестве класса, а Texture2d
имеет хороший оператор []
для извлечения отдельных изображений текстур.
Поскольку сообщество kotlin выглядит чрезвычайно активным и поддерживающим, я хотел бы знать, есть ли у вас идеи получше.