2

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

4

2 回答 2

3

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

于 2016-01-03T23:55:10.953 回答
-2

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

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

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

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

1) 扩展数据的 INTERFACE,如果它存在(鉴于我一直在阅读有关数据类的内容,我认为它不会这样做。这听起来更像是一种语言特性,而不仅仅是一个有用的代码对象)

2) 将您希望从数据类中取出的方法的确切方法签名添加到您的界面。通过这样做,您获得了两件事:首先,当数据类实现您的接口时,您可以获得方便的方法,其次,您仍然拥有接口应提供的灵活性,因为现在即使是非数据类也可以实现如果您需要他们的接口,他们只需要确保手动定义数据类接口方法。

于 2016-01-03T22:34:16.320 回答