首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vavr注释处理工具不会启动。

Vavr注释处理工具不会启动。
EN

Stack Overflow用户
提问于 2020-12-11 16:02:19
回答 1查看 191关注 0票数 2

我试图从这里复制一个简单的对象分解示例。我将以下依赖项添加到我的项目中:

代码语言:javascript
复制
      <dependency>
        <groupId>io.vavr</groupId>
        <artifactId>vavr</artifactId>
        <version>${vavr.version}</version>
      </dependency>
      <dependency>
        <groupId>io.vavr</groupId>
        <artifactId>vavr-match</artifactId>
        <version>${vavr.version}</version>
      </dependency>
      <dependency>
        <groupId>io.vavr</groupId>
        <artifactId>vavr-match-processor</artifactId>
        <version>${vavr.version}</version>
      </dependency>

...where vavr.version0.10.3,并从上面的源复制粘贴了这个示例:

代码语言:javascript
复制
import io.vavr.Tuple;
import io.vavr.Tuple2;
import io.vavr.match.annotation.Patterns;
import io.vavr.match.annotation.Unapply;
import lombok.AllArgsConstructor;
import lombok.Getter;

import static io.vavr.API.$;
import static io.vavr.API.Match;
import static io.vavr.API.Match.*;

public class Example {

  @Getter
  @AllArgsConstructor
  public static class Employee {
    private String name;
    private String id;
  }

  @Patterns
  public static class Demo {
    @Unapply
    static Tuple2<String, String> Employee(Employee Employee) {
      return Tuple.of(Employee.getName(), Employee.getId());
    }
  }

  public static void main(String[] args) {
    Employee person = new Employee("Carl", "89696D8");

    String result = Match(person).of(
      Case(Demo.Employee($("Carl"), $()), (name, id) -> ""),
      Case($(), () -> "notfound")
    );
  }
}

但是,第一个Case会产生一个编译错误Expected 1 argument but found 2,这意味着注释处理不起作用,也没有生成相应的模式。如果我错了,请纠正我。

我正在使用Intellij 2020.1,并在其中启用了注释处理。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-06 04:31:58

原因是您在这一行中使用了生成的类的无效名称:

代码语言:javascript
复制
Case(Demo.Employee($("Carl"), $()), (name, id) -> "")

应将其替换为:

代码语言:javascript
复制
Case(Example_DemoPatterns.$Employee($("Carl"), $()), (name, id) -> name + " " + id)

由于Demo是一个静态嵌套类,它需要以Example_作为前缀,而且由于生成器是这样工作的,所以需要用Patterns作为后缀。

这里是一个完整的、可构建的示例,您可以克隆并试用它。它包含maven和gradle的示例。要验证它是如何工作的,请将上述行更改为例如:

代码语言:javascript
复制
Case(Example_DemoPatternsWhatever.$Employee($("Carl"), $()), (name, id) -> name + " " + id)

然后跑:

代码语言:javascript
复制
mvn exec:java

它会失败(没有生成这样的类),但是当您运行tree target/时,您将得到如下内容:

代码语言:javascript
复制
target
├── classes
├── generated-sources
│   └── annotations
│       └── Example_DemoPatterns.java
└── maven-status
    └── maven-compiler-plugin
        └── compile
            └── default-compile
                ├── createdFiles.lst
                └── inputFiles.lst

这意味着这个类确实是生成的。这是您需要使用的类。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65254661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档