为什么Kotlin中的数据类不能用内部修饰符标记?

为什么Kotlin中的数据类不能用内部修饰符标记?,kotlin,Kotlin,我有一个简单的类,比如说User。现在我想创建一个内部数据类比方说用户属性内部用户类,但是只要我将内部修饰符添加到数据类用户属性中,IDE就会抱怨修饰符内部与数据不兼容。我缺少什么?内部类实例依赖于外部类实例的存在,也就是说,没有外部类实例,就不能有内部类实例。 现在,如果您试图将该对象存储在DB中,“data”修饰符将内部对象声明为要存储的自己的实例,违反了内部类的约束 如果可能的话,您可以提取内部类的信息,而不必将外部类放在堆栈上,根据定义,外部类是无效的 因此,只能在外部类上应用“data

我有一个简单的类,比如说
User
。现在我想创建一个
内部数据类
比方说
用户属性
内部
用户
类,但是只要我将
内部
修饰符添加到
数据
用户属性
中,IDE就会抱怨修饰符内部与数据不兼容。我缺少什么?

内部类实例依赖于外部类实例的存在,也就是说,没有外部类实例,就不能有内部类实例。 现在,如果您试图将该对象存储在DB中,“data”修饰符将内部对象声明为要存储的自己的实例,违反了内部类的约束

如果可能的话,您可以提取内部类的信息,而不必将外部类放在堆栈上,根据定义,外部类是无效的


因此,只能在外部类上应用“data”修饰符。。它还应该存储内部类(必须对此进行检查)。如果在数据库中需要独立的内部类,它首先应该是自己的类。

一方面,内部类使用外部实例作为隐藏的第一个构造函数参数(实际上是
私有val
)。另一方面,数据类行为公开所有构造函数参数,包括它们的名称(在
toString()
中),因此它们“应该”可见。另外,在这种情况下

如果超类型具有打开且返回兼容类型的componentN()函数,则会为该数据类生成相应的函数并重写该超类型的函数。如果由于签名不兼容或是final而无法重写超类型的函数,则会报告错误

component1()
是外部实例还是实际编写的第一个参数


设计师们可能认为任何行为都会让足够多的用户感到惊讶,所以最好根本不允许这种行为。如果你想让你的
UserProperty
像一个内部类,你只需要自己添加一个
User
构造函数参数。

这是不可能的,但我找不到更详细的解释。您可以将它们作为一个内部类,只需像您显然那样嵌套它们,但是您不能在Kotlin中应用关键字
internal
data class
,因为它与数据库无关(尽管您可以拥有一个对它们有特殊支持的库)。DB与这些有什么关系,请您详细说明一下?对不起,我是不是遗漏了什么?是的,现在我明白了。这将导致严重的混乱。