【问题标题】:Builder annotation is not supporting in Kotlin multi-inheritance architectureKotlin 多继承架构不支持生成器注释
【发布时间】:2021-10-25 18:32:07
【问题描述】:

Lombok @SuperBuilder 不适用于 kotlin 用例中的继承:

@Data
@Entity
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@ToString(callSuper = true)
@SuperBuilder
open class Test1 : Test2() {

    @Nullable
    @JsonIgnore
    @Id
    private val id: Int? = null

    fun of(id: String?, code: String?, label: String?, sort: Int?): Test1 {
        return Test1.builder().id(id).code(code).label(label).sort(sort).build()
    }
}

@MappedSuperclass
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Slf4j
@DiscriminatorValue("logging")
@Polymorphism
@SuperBuilder
open class Test2 : Test3() {
    @Nullable
    @JsonIgnore
    private val lngId: Int? = null

    @Nullable
    @JsonIgnore
    private val requestedLngId: Int? = null
}


@Data
@NoArgsConstructor
@AllArgsConstructor(staticName = "of")
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
@MappedSuperclass
@Polymorphism(type = PolymorphismType.IMPLICIT)
@DiscriminatorValue("simple")
@SuperBuilder
open class Test3 {
    @Id
    @EqualsAndHashCode.Include
    private val id: String? = null

    @EqualsAndHashCode.Include
    private val code: String? = null

    @Nullable
    private val label: String? = null

    @Nullable
    private val sort: Int? = null
}
Test1.builder().id("36").code("code").label("label").build();

我无法检索父类中存在的数据。我不确定如何将注释 @superbuilder 与上述 kotlin 代码一起用于上述场景。 @superbuilder 适用于普通类,但不适用于 kotlin 代码中的类

【问题讨论】:

  • 我不明白你想做什么。您想将 Java 源代码转换为 Kotlin 源代码吗?或者您想从 Kotlin 代码中使用 Lombok 增强的 Java 类?您是否使用 Kotlin 的 Lombok 编译器插件 (org.jetbrains.kotlin.plugin.lombok)?
  • 请编辑您的帖子并删除未使用的详细信息和文本以简化您的问题,并注意关注您的主要问题并详细解释它以帮助其他人回答您的问题。
  • 我添加了 kotlin 代码以便更好地理解。我无法实现 Superbuilder 注释。请针对该问题提出解决方案或替代方案。

标签: kotlin multiple-inheritance lombok kotlin-android-extensions


【解决方案1】:

Lombok 是一个注解处理器,专为注解 Java 源代码而设计。对于 Kotlin 源,它不起作用(并且可能永远不会起作用)。

如果你想使用@SuperBuilder,你必须使用Java。此外,如果您想在 Kotlin 中使用 Lombok 增强的 Java 类,请确保在编译 Kotlin 代码之前使用 javac 编译 Java 源代码。

Kotlin 通过 Lombok compiler plugin 支持 Lombok 注释的 Java 源代码。但是,这只适用于有限的注释集,并且只生成声明。因此,您仍然需要一个带有 Lombok 的 javac 来编译 Java 源代码。

【讨论】:

  • 有什么方法可以在 kotlin 中实现上述目标吗?
  • 我什么都不知道,但我不是 Kotlin 专家。与在 Java 中手动实现构建器相比,可能有一些花哨的 Kotlin 样式模式可以用更少和/或更好的代码来实现您的目标。但是,我怀疑它会像@SuperBuilder 一样简单。
猜你喜欢
  • 2012-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-10
  • 2010-11-16
  • 1970-01-01
  • 2011-04-24
相关资源
最近更新 更多