是否可以强制两个 类 在编译时实现相同的字段名称但类型不同?

Is it possible to enforce two classes to implement the same field names but of differing type at compile time?

假设有两个并行的 classes:

class A(
        val stringField: String,
        val intField: Int,
        val floatField: Float
)

class B(
        val stringField: Boolean,
        val intField: Boolean,
        val floatField: Boolean
)

请注意,两个 class 都有 相同的 字段 names 但它们的 types 不同。

我想知道是否可以在编译时以某种方式强制执行,这样当class A 有一个字段名时它就不会编译class B没有。

在运行时,我可能会使用一些反射来强制执行此操作,但我真的很好奇它是否可以在编译时使用,并且我也不希望为此求助于反射。

编辑 1: 我现在确实看到泛型可能是这里解决方案的一部分,但在实际情况下 class A 有很多领域不同的类型,在 class B 中,所有字段始终都是 Boolean 类型。理想情况下,我不必为 class A

中使用的每个不同字段类型添加通用

编辑 2: 有关手头用例的更多详细信息:

我需要根据一些 ConfigurationFull 对象转换为 Partial 对象(配置为 false 的字段最终应该是 nullPartial 对象中)。这三个 classes 表现出非常相似,这就是为什么我想对它们执行合同(这样它们就不会随着时间的推移而失去同步)。

class Full(
        val stringField: String,
        val intField: Int,
        val floatField: Float,
        ...
)

class Partial(
        val stringField: String?,
        val intField: Int?,
        val floatField: Float?,
        ...
)

class Configuration(
        val stringField: Boolean,
        val intField: Boolean,
        val floatField: Boolean,
        ...
)

这不是编译时检查,但您始终可以编写强制执行此约束的测试。

例如,我编写了一个测试,找到所有用我的 DSL 注释装饰的函数,并验证所有这些函数都在我们的文档中进行了描述(是的!测试文档!)。

您可以使用 reflections 库,它使使用反射更有趣(kotlin-reflect 已经很好但仍然...)。