如果您不知道Project Lombok可以帮助解决Java的一些烦恼,例如生成带注释的getter和setter,甚至像使用@Data生成简单的JavaBean.它可以真正帮助我,特别是在50个不同的事件对象中,你有多达7个不同的字段需要构建和使用getter隐藏.我可以删除近千行代码.
但是,我担心从长远来看,这将是一个令人遗憾的决定.##Java Freenode
当我提到它时,Flamewars会在频道中爆发,提供代码片段会让可能的帮助者感到困惑,人们会抱怨缺少JavaDoc,而且未来的委托人可能会将其全部删除.我真的很喜欢积极的,但我担心的是消极的.
那么:在任何项目中使用Lombok都是安全的吗?积极影响是否值得消极?
我想在Lombok中使用数据类.由于它有大约十几个字段,我用它@Data
来注释它以生成所有的setter和getter.但是,有一个特殊字段,我不希望实现访问器.
龙目岛如何省略这个领域?
我正在尝试在我使用IntelliJ IDEA 11开发的项目中使用Lombok.
我为IDEA安装了第三方插件,看起来工作正常,因为IDEA会看到所有自动生成的方法/字段.
所以我有一个使用Slf4j的类.我这样注释了它
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class TestClass
{
public TestClass()
{
log.info("Hello!");
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我构建我的项目时,编译器吐出:cannot find symbol variable log
.
你能告诉我我在这里失踪了吗?
更新:事实证明它的RequestFactory注释过程失败了.
input files: {com.zasutki.courierApp.server.TestServlet, com.mine.courierApp.server.model.DatastoreObject}
annotations: [javax.inject.Singleton, javax.inject.Inject, lombok.Getter, lombok.Setter, com.googlecode.objectify.annotation.Id, com.googlecode.objectify.annotation.OnSave]
Processor com.google.web.bindery.requestfactory.apt.RfValidator matches [lombok.Getter, com.googlecode.objectify.annotation.Id, javax.inject.Inject, lombok.Setter, com.googlecode.objectify.annotation.OnSave, javax.inject.Singleton] and returns false.
cannot find symbol variable log
Run Code Online (Sandbox Code Playgroud)
关于变通方法的任何想法?
Update2:也许这不是读者想要听到的东西,但最终我转而使用Scala.
似乎一切都好.但是当我编译测试时,错误来了:找不到方法getXXX和setXXX.
我用IntelliJ打开了.class文件,发现没有setXXX和getXXX方法.
有人可以告诉我为什么吗?
升级到JDK 21后,我的Spring Boot项目出现以下编译错误:
Fatal error compiling: java.lang.NoSuchFieldError:
Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field 'com.sun.tools.javac.tree.JCTree qualid'
Run Code Online (Sandbox Code Playgroud) 我今天遇到了lombok.
我非常想知道它是如何工作的.
Java Geek文章提供了一些线索,但对我来说并不是很清楚:
Java 6删除了apt并使javac能够管理注释,简化流程以获得更简单的单步计算.这是龙目岛采取的路径.
也许使用Java 6编译过程将是:javac - > apt - > lombok apt process - >读取类文件并使用ASM添加set/get方法?
你能告诉我关于机制的更多细节吗?
我在ubuntu上使用IntelliJ IDEA.我将lombok.jar添加到我的项目中并为IDEA安装了Lombok插件.我可以访问注释,但不会生成getter和setter.如果我尝试访问不存在的getter或setter方法,我会得到相同的错误.我能错过什么?
我上课了
@Value
@NonFinal
public class A {
int x;
int y;
}
Run Code Online (Sandbox Code Playgroud)
我有另一个B级
@Value
public class B extends A {
int z;
}
Run Code Online (Sandbox Code Playgroud)
lombok抛出错误,说它无法找到A()构造函数,显式调用它我想要lombok做的是给类b注释,使它生成以下代码:
public class B extends A {
int z;
public B( int x, int y, int z) {
super( x , y );
this.z = z;
}
}
Run Code Online (Sandbox Code Playgroud)
我们在龙目岛有注释吗?
我有一个maven项目,在命令行没有问题的情况下构建.但是,当我使用IntelliJ构建它时,我收到错误:
java: FileName.java:89: cannot find symbol
symbol : variable log
Run Code Online (Sandbox Code Playgroud)
java文件中没有定义或导入日志,但有一个
@Slf4j
final public class FileName {
Run Code Online (Sandbox Code Playgroud)
应该定义日志类的类体之前的语句.
在项目结构窗口中,类为:
Maven: org.slf4j:jcl-over-slf4j:1.6.1
Maven: org.slf4j:slf4j-api:1.6.6
Maven: org.slf4j:slf4j-log4j12:1.6.6
Maven: org.slf4j:slf4j-simple:1.6.6
Run Code Online (Sandbox Code Playgroud)
列在库下,表示已下载并可用.
知道为什么这会通过命令行与maven一起构建,而不是通过IntelliJ以及如何解决问题?
我只是试图将一个基于maven的项目发送到另一台计算机和HORROR,到处都是红色标记!!
但是mvn clean install
建设得很好.
很快我注意到,龙目不产生getter和setter我的班,但是@Getter
和@Setter
通过Eclipse中被正确识别.
两台计算机使用相同的Maven版本(3.0.4)但使用不同的JDK(1.6_23和1.6_33).他们都使用Eclipse Indigo 32位.
lombok ×10
java ×8
annotations ×1
eclipse ×1
java-21 ×1
maven ×1
slf4j ×1
spring-boot ×1
upgrade ×1