我的目标是学习如何创建注释。因此,我使用 lombok 项目的 @Getter
注释进行练习。然而,让我困扰的一件事是 IntelliJ IDEA 抛出 Cannot resolve method 'getId' in 'Product'
警告。请注意,编译不是问题。
我做了什么:
我的预期结果:IDE 知道将在编译时注入 getId
方法。
我的实际结果:IDE 抛出警告。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
public static Logger logger = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
Product product = new Product();
logger.debug(Integer.toString(product.getId()));
}
}
import lombok.Getter;
public class Product {
@Getter
private int id = 10;
}
PS:听说需要安装 Lombok 插件。有没有没有插件的方法?我需要它在我自己的注释中实现它。
答案 0 :(得分:3)
Lombok 不是注释处理器。 Lombok 是一款独特的软件,并且(作为核心作者之一),lombok 所做的事情一点也不微不足道:如果你想做 lombok 式的事情,你必须分叉 lombok 代码库。>
以 lombok 为例说明注释可以做什么从这个意义上说并不是一个好主意:Lombok 是它自己的东西,只是使用注释来知道在哪里操作,它不是处理器(但是,奇怪的是,为了成为编译过程的一部分,它会将自己注册为一个处理器)。
回答您的直接问题:
是的,你需要安装 lombok 插件;如果没记错的话,最新版本的 Intellij 会默认安装它。
不,没有它,lombok 就无法工作。
但是,实际的普通注释处理器可以正常工作。
基本(非龙目岛)注释处理器只能创建新文件 - 它们不能更改现有文件。只有 lombok 可以做到这一点(它需要一个插件)。如果您编写了一个基本的注释处理器(因此只能创建新文件),那么您所做的(打开“注释处理”)就是所需要的。
请注意,基本的注释处理器往往需要经过完整的构建,并且在增量编译方面存在问题(例如,如果加载了注释处理器,增量编译工具通常只会编译所有内容。大多数工具都知道 lombok 不是) t 注释处理器/在增量编译场景中工作得很好,并且知道不要退回到“一直编译所有东西”)。对于大中型项目,“编译所有内容”是您想要避免的巨大时间浪费。
接下来的步骤:
答案 1 :(得分:1)
如@rzwitserloot 回答中所述, 不要使用 Lombok 作为学习注释的手段。
相反, 阅读注释教程。 以下是一些链接: