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

时间:2016-01-03 21:56:27

标签: kotlin data-class

是否有可以扩展的接口或其他方式来创建接口,实现类必须是数据类?访问数据类API方法(如copy()。

)会很有用

2 个答案:

答案 0 :(得分:2)

不, copy 方法对每个数据类都有唯一数量的参数,因此拥有这样的接口是没用的。如果所有数据类都具有相同的字段 - 只需创建并实现通用接口。

答案 1 :(得分:-1)

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

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

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

要强制执行此操作,您必须让X以隐式或显式方式扩展Y的接口。由于在Java(可能是Kotlin)中,接口无法扩展对象,因此您有两种选择:

1)扩展数据的INTERFACE(如果存在的话)(我不认为它确实给出了我正在阅读的关于数据类的内容。这听起来更像是一个烘焙的语言功能而不仅仅是有用的代码对象)

2)在您的界面中添加您想要的数据类方法的确切方法签名。通过这样做,您获得了两件事:首先,每当数据类实现您的接口时,您都会获得方便的方法,其次,您仍然具有接口所要提供的灵活性,因为现在甚至是非数据类如果需要,可以实现你的接口,他们只需要确保手动定义数据类接口方法。