相关疑难解决方法(0)

lombok是如何工作的?

我今天遇到了lombok.
我非常想知道它是如何工作的.
Java Geek文章提供了一些线索,但对我来说并不是很清楚:

Java 6删除了apt并使javac能够管理注释,简化流程以获得更简单的单步计算.这是龙目岛采取的路径.

也许使用Java 6编译过程将是:javac - > apt - > lombok apt process - >读取类文件并使用ASM添加set/get方法?

你能告诉我关于机制的更多细节吗?

java annotations lombok

134
推荐指数
4
解决办法
3万
查看次数

在Eclipse中自动为类创建构建器

有没有办法使用自动构建器为类创建构建器(Joshua Bloch的Builder模式)Eclipse?例如菜单中的选项,插件或其他内容.我在" Refactor" 下找不到任何东西.

java eclipse builder

43
推荐指数
3
解决办法
3万
查看次数

Lombok项目是否支持Java 9?

我在我的项目中使用了龙目岛,但我的同事不同意使用它,他的理由是(来自lombok文件的争议)

这两个项目Lombok都利用非公共API来完成他们的巫术.这意味着使用后续IDE或JDK版本可能会破坏Project Lombok的风险.

但这是一篇2010年写的非常古老的文档,也许现在已经解决了这个问题,所以我想知道Lombok是否支持Java 9并且它仍然使用非公共API:s?

lombok java-9

35
推荐指数
1
解决办法
1万
查看次数

Project Lombok有哪些风险?

我想出了新的一年的性能目标,我认为我的目标是减少代码库的大小,特别是样板,我会觉得很有趣.我提出的解决这个问题的一个动作就是使用Project Lombok来使bean尽可能短.但我习惯于忽视新软件和方法的缺点,所以我依赖Stack Overflow社区:谁能告诉我为什么龙目岛是个坏主意?

java boilerplate java-ee lombok

34
推荐指数
8
解决办法
1万
查看次数

在Eclipse中自动生成toString方法的快捷方式是什么?

toString某些简单类的自动生成方法是好还是坏?

我正在考虑生成类似下面的内容,它采用变量名称并生成一个toString方法,打印名称后跟其值.

private String name;
private int age;
private double height;

public String toString(){
   return String.format("Name: %s Age: %d Height %f", name, age, height);
}
Run Code Online (Sandbox Code Playgroud)

java automation tostring

28
推荐指数
4
解决办法
3万
查看次数

无法将Lombok与Java 11一起使用

我们将Java版本从8升级到11但是我得到了getter/setter方法的编译错误,其中我使用Lombok的Getter和Setter Annotations实现了POJO类.

有没有办法使用Lombok的@Data注释,它提供getter和setter而不在Java 11中实现它们?

目前,我面临的错误是:

找不到getStoreName()

where storeName在类上面声明为全局变量,在类上面有@Data Lombok注释.

java lombok intellij-lombok-plugin java-11

27
推荐指数
1
解决办法
1万
查看次数

Project Lombok是否适合大型Java项目?

是否有人使用Project Lombok进行大规模生产系统?它如何影响您的编译过程(即它是否进行双程编译,减慢速度,使其更脆弱)?

java code-generation boilerplate lombok

22
推荐指数
2
解决办法
4345
查看次数

自动委托java类的所有方法

假设我有一个包含许多公共方法的类:

public class MyClass {

    public void method1() {}
    public void method2() {}
    (...)
    public void methodN() {}

}
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个包装类,它将所有方法委托给包装实例(委托):

public class WrapperClass extends MyClass  {
    private final MyClass delegate;

    public WrapperClass(MyClass delegate) {
        this.delagate = delegate;
    }

    public void method1() { delegate.method1(); }
    public void method2() { delegate.method2(); }
    (...)
    public void methodN() { delegate.methodN(); }

}
Run Code Online (Sandbox Code Playgroud)

现在,如果MyClass有很多方法,我需要覆盖它们中的每一个,这或多或少是相同的代码,只是"委托".我想知道是否有可能做一些魔法来自动调用Java中的方法(所以Wrapper类需要说"嘿,如果你在我身上调用一个方法,只需去委托对象并在其上调用此方法)".

顺便说一句:我不能使用继承,因为委托不在我的控制之下.我只是从其他地方得到它的实例(另一种情况是如果MyClass是最终的).

注意:我不想生成IDE.我知道我可以在IntelliJ/Eclipse的帮助下完成它,但我很好奇是否可以在代码中完成.

有什么建议如何实现这样的事情?(注意:我可能会在某些脚本语言中执行此操作,例如php,我可以使用php magic功能来拦截调用).

java reflection delegates

21
推荐指数
4
解决办法
1万
查看次数

Maven Groovy和Java + Lombok

我正在尝试将groovy添加到利用Lombok的现有Java Maven项目中.不幸的是,当我使用下面的pom片段启用groovy-maven-eclipse编译器时,我的lombok注释的java文件无法编译.据我所知,Lombok根本没有参与java文件的编译.

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.1</version>
    <configuration>
        <compilerId>groovy-eclipse-compiler</compilerId>
        <verbose>true</verbose>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-eclipse-compiler</artifactId>
            <version>2.6.0-01-SNAPSHOT</version>
        </dependency>
    </dependencies>
</plugin>
Run Code Online (Sandbox Code Playgroud)

我还应该指出,在eclipse中(使用m2e)一切正常.当我尝试做一个mvn包时,我的问题出现了.

java groovy maven-3 lombok

16
推荐指数
1
解决办法
6737
查看次数

在Java中,是否有更好的替代getter和setter方法?

Java类中常见的有许多getter和setter方法,每个方法对应一个数据模型类变量.我意识到很多IDE会为你创建这些,但是我试图避免这种混乱,并且在我的课程中没有所有这些方法.那么,有没有办法以类外的只读方式访问变量(就好像它是公共最终的),同时保留了类或子类内的写访问权限(就好像它是私有的或受保护的).

我提出的唯一伪解决方案是基类(或具有默认方法的接口),它具有get(String variableName)方法,然后通过反射获取类的字段并返回适当的字段.缺点是,为了工作,变量必须是公共的,所以只有按照惯例它才符合我的要求(在扩展/实现类中有我想要访问的变量,我只调用get方法在类之外,并没有实现set方法).我不喜欢的主要问题是,如果变量名称发生变化,get方法的调用者将不会导致编译器错误,因为变量名称只是一个硬编码的String.

谁有更好的主意?

java oop reflection getter setter

7
推荐指数
2
解决办法
4381
查看次数