Kotlin:实现者必须是数据类的接口?

有一个接口,我可以扩展或其他方式来创建一个接口,从而实现的类必须是一个数据类? 访问诸如copy()之类的数据类API方法将是有用的。

不, copy方法对每个数据类都有唯一的参数个数,所以没有这个接口是没有用的。 如果你所有的数据类有相同的字段 – 只需创建和实现通用接口。

所以我要在我的答案前面说我没有Kotlin的经验,但是我有很多Java的经验,据我所知它是相似的,所以除非Kotlin有一个功能可以帮助你做你想要的Java我的答案可能仍然适用。

如果我理解正确,基本上你要做的是强制任何类实现你的接口X,也必须是Y的子类型。

我的第一个问题是你为什么要这样做? 强制X只能由Y的子类实现,就是混合接口和实现,这与接口的作用是完全相反的。

为了执行这个,你必须让X扩展Y的接口,无论是隐式的还是显式的。 由于在Java中(大概是Kotlin),接口不能扩展对象,你有两个选择:

1)扩展数据的INTERFACE(如果存在的话)(我不认为它给出了我一直在读的关于数据类的东西,这听起来更像是一个烘焙的语言特性,而不仅仅是一个有用的代码对象)

2)向你的界面添加你想要的数据类的方法签名。 通过这样做,你已经获得了两件事情:首先,当数据类实现你的接口的时候,你得到了你的便利方法,其次,你仍然有接口意图提供的灵活性,因为现在即使非数据类也可以实现你的界面,如果你需要他们,他们只需要确保手动定义数据类的接口方法。