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

Google Guice和Lombok-@AllArgsConstructor(onConstructor = @__(@Inject))用于抽象类

仇高韵
2023-03-14

我发现@AllArgsConstructor(onConstructor = @__(@Inject))有助于在使用Google Guice时保持代码清洁。我可以保存构造函数代码。例如:

@AllArgsConstructor(onConstructor = @__(@Inject))
public class SomeClass {
    private final DependentClassOne classOne;
    private final DependentClassTwo classTwo;

    // ...
}

对于abstract类,我可以将@Inject用于构造函数。

@AllArgsConstructor(onConstructor = @__(@Inject))
public abstract class AbstractParentClass {
    private final DependentClassOne classOne;
}

public class ChildClass extends AbstractParentClass {
    private final DependentClassTwo classTwo;

    @Inject
    public ChildClass(final DependentClassOne classOne, final DependentClassTwo classTwo) {
        super(classOne);
        this.classTwo = classTwo;
    }
}

是否可以使用类似于@allargsconstuctor(onConstructor=@_(@Inject))的方法将构造函数代码保存在ChildClass中?

共有1个答案

东郭翰音
2023-03-14

不,由于Lombok的限制,当有父构造函数时,不可能在子类中定义AllArgsConstructor(请参阅GitHub上的此问题和SO上的另一个答案)。

你可以混合字段/setter注入在父与构造函数注入在子,但我建议避免它。

 类似资料:
  • 我有以下课程: 为什么我无法在抽象类(< code>Parent)的实例上调用< code>toBuilder(),如下面的代码所示?

  • 问题内容: 当我创建一个具有一个或多个字段的新Java类并将注释从lombok 附加到它时,我得到此消息 从Gradle Build控制台上。通过使用此配置创建一个新的空Android项目,我能够重现这一点。 类(从未使用或实例化) build.gradle: 而从龙目岛不会引起任何问题,甚至没有被提到的gradle,所以是如果没有字段。 这是Lombok的错误,还是位于屏幕前面的错误? 问题答案

  • 我有扩展抽象类的类,我不想把放在所有子类的顶部。 有没有办法为抽象类实现Lombok?

  • 问题内容: 如果我使用 Lombok* 指定 @AllArgsConstructor ,它将生成一个构造函数,用于设置所有声明的(不是最终的,不是静态的)字段。是否可以省略某些字段,而为所有其他字段保留生成的构造函数? * 问题答案: 不,那是不可能的。有一个功能请求来创建一个,您可以在其中指定所涉及字段的列表。 全面披露:我是Lombok项目的核心开发人员之一。

  • 我想读关于抽象的文章,但读到不同的文章,我感到很困惑。 下面是我无法理解的问题: 1)“抽象是通过使用抽象类和接口实现的吗?”我对此进行了搜索,得到了三种类型的答案: 与此处解释的不同。 它们是相同的,只是不同的观点,就像这里解释的。 最后一个是抽象类用来实现抽象。 哪一个是真的?请举一个简单的例子。 2)“抽象意味着隐藏不必要的细节。比如专注于一个对象做什么而不是它是如何完成的。” 这是正确的吗

  • 问题内容: 我是一名 Java 开发人员,对Object Orientation概念有很好的了解( 或者也许我这样认为 )。现在我正在学习设计模式(从头开始设计模式)。我一直在阅读有关OOPS概念抽象的文章,以简要地理解它,而阅读更多有关它的内容,使我比以前更加困惑。 据我了解,抽象是指隐藏程序的内部细节,同时将接口暴露给其他程序员,而无需担心内部细节。但是我不明白 抽象类如何适应这种抽象概念,其