当前位置: 首页 > 知识库问答 >
问题:

龙目岛@SuperBuilder抽象类,具有一般原因错误:不兼容的类型

唐茂实
2023-03-14

我有泛型类型的抽象类。它有抽象的toBuilder方法,如下所示:在抽象类上使用Lombok @SuperBuilder注释和toBuilder?

@Data
@SuperBuilder(toBuilder = true)
public abstract class TenantConfItem<T extends DeepCloneable<T>> {

    private final URN urn;

    private final Long version;

    private final T configData;

    public abstract TenantConfItemBuilder<T, ?, ?> toBuilder();

    public TenantConfItem<T> copy() {
        return this.toBuilder().build();
    }
}

子类型:

@SuperBuilder(toBuilder = true)
@EqualsAndHashCode(callSuper = true)
public class PointsExpirationByEarnedDatePolicy extends TenantConfItem<ExpirationByEarnedDate> implements Singleton {

}

这里我使用它的生成器:

val policyBuilder = PointsExpirationByEarnedDatePolicy.builder()
                .version(0L)
                .configData(new ExpirationByEarnedDate(retentionDays));

但是我收到配置数据的错误:

error: incompatible types: CAP#1 cannot be converted to ?
                .configData(new ExpirationByEarnedDate(retentionDays));
                           ^
  where CAP#1,CAP#2 are fresh type-variables:
    CAP#1 extends PointsExpirationByEarnedDatePolicyBuilder<CAP#2,CAP#1> from capture of ?
    CAP#2 extends PointsExpirationByEarnedDatePolicy from capture of ?

我猜这是因为父构建器有3个参数与泛型(tenantConfItemBuilder


共有1个答案

姜乐语
2023-03-14
匿名用户

< code > @ super builder(to builder = true)支持泛型类,并从子类中的超类细化类型参数。所以你的类和它们的注释是好的。

但是,lombok有时会在推断val的正确类型时遇到问题,尤其是在涉及类型参数时。

解决方案是用实际类型< code > pointsexpirationbyearnedtapolicybuilder替换< code>val

 类似资料:
  • 如果我比较< code>MyClass(用< code>@EqualsAndHashcode注释)的两个对象是否相等,是否会检查< code>newClassList属性的顺序?

  • 我一直试图编译这个简单的警报对话框,以便在用户单击提交按钮时显示。编译代码时会弹出一条错误消息: 错误:(33,74)错误:不兼容的类型: 这个类叫做Login_Activity,它扩展了BaseActivity,它扩展了Activity。

  • 我有下面的Kotlin代码。一个名为的密封类和两个对象类和继承自密封类。我在is Cat情况下的子句中得到这个错误。 为什么会给出这个错误?如何使用Kotlin中的密封类来进行这种类型的操作?密封类是做多态的好选择吗?

  • 我的项目使用gwt maven hibernate.并在我的项目中使用一个库来创建会话工厂,使用 configuration configuration = new annotation configuration();session factory = configuration . configure(config file)。buildSessionFactory(); 并将其返回给我的应用

  • 想象一下,我有一个抽象类动物的方法: 然后我有一个类,用以下内容扩展这个抽象类: 我希望每个扩展Animal的类都有一个fetch()方法。然而,fetch方法为相关动物指定了一些独特的特征(狗的爪子、猫的爪子等)。例如,cat的fetch()将获取参数fetch(fellinecat kitty)并表示: 因此,抓取方法接受了扩展抽象类“动物”(因此是动物)的参数。我在“动物”中定义了抓取()方

  • 问题内容: 我正在学习Java。我试图运行代码,但出现此错误:。它向我显示错误的代码部分。 为什么会这样呢? 问题答案: 这是因为在类中不能有两个具有相同名称但返回类型不同的方法。 子类不能使用与返回类型不同的超类中已经存在的方法相同的名称声明方法。 但是,子类可以声明具有与超类相同的签名的方法。我们称此为“覆盖”。 你需要这个 要么 一个好的做法是通过注释标记覆盖的方法: