如何抑制警告“无法解析方法”,因为您使用注释生成方法?

时间:2021-07-21 12:10:15

标签: java lombok

我的目标是学习如何创建注释。因此,我使用 lombok 项目的 @Getter 注释进行练习。然而,让我困扰的一件事是 IntelliJ IDEA 抛出 Cannot resolve method 'getId' in 'Product' 警告。请注意,编译不是问题。

我做了什么:

  1. 在“设置”中启用注释处理。

我的预期结果: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 插件。有没有没有插件的方法?我需要它在我自己的注释中实现它。

2 个答案:

答案 0 :(得分:3)

Lombok 不是注释处理器。 Lombok 是一款独特的软件,并且(作为核心作者之一),lombok 所做的事情一点也不微不足道:如果你想做 lombok 式的事情,你必须分叉 lombok 代码库。

以 lombok 为例说明注释可以做什么从这个意义上说并不是一个好主意:Lombok 是它自己的东西,只是使用注释来知道在哪里操作,它不是处理器(但是,奇怪的是,为了成为编译过程的一部分,它会将自己注册为一个处理器)。

回答您的直接问题:

  1. 是的,你需要安装 lombok 插件;如果没记错的话,最新版本的 Intellij 会默认安装它。

  2. 不,没有它,lombok 就无法工作。

  3. 但是,实际的普通注释处理器可以正常工作。

  4. 基本(非龙目岛)注释处理器只能创建新文件 - 它们不能更改现有文件。只有 lombok 可以做到这一点(它需要一个插件)。如果您编写了一个基本的注释处理器(因此只能创建新文件),那么您所做的(打开“注释处理”)就是所需要的。

请注意,基本的注释处理器往往需要经过完整的构建,并且在增量编译方面存在问题(例如,如果加载了注释处理器,增量编译工具通常只会编译所有内容。大多数工具都知道 lombok 不是) t 注释处理器/在增量编译场景中工作得很好,并且知道不要退回到“一直编译所有东西”)。对于大中型项目,“编译所有内容”是您想要避免的巨大时间浪费。

接下来的步骤:

  • 考虑是否可以仅通过创建新文件来完成您要进行的更改。如果答案是否,我必须更改现有文件,请放弃。或者,fork lombok 并花半年时间搞清楚 javac、ecj 和 intellij 的内部工作原理:/
  • 如果您只能通过制作新文件来完成这项工作,请注意体验不会像 lombok 那样流畅和快速。忘记 lombok 为例,它不是一个普通的注释处理器。查找有关注释处理的任何教程/阅读 API 的内容/查看项目的来源,例如 AutoValue 以了解“正常”注释处理器如何工作的示例。知道您可以做您想做的事,而且只需要您已经做过的事情:启用“运行处理器”复选框。

答案 1 :(得分:1)

如@rzwitserloot 回答中所述, 不要使用 Lombok 作为学习注释的手段。

相反, 阅读注释教程。 以下是一些链接: