java - 在 java 10 中使用 lombok.Getter(lazy = true) 时出现不兼容类型错误

标签 java lombok java-10

我正在尝试使用 reactorreactor.ipc.netty.http.client.HttpClient 进行一些缓存,并使用 lombok 的 将其初始化为惰性 getter 字段>@Getter(惰性 = 真)

在 Java 8 中一切正常,但无法编译并出现 错误:不兼容的类型:持续时间无法转换为字符串 在此代码段中使用 Java 10

@Value
public static class Translations {

    Map<String, Translation> translations;

    @Value
    public static class Translation {

        Map<String, String> content;

    }
}

@Getter(lazy = true)
Mono<Map<String, Translations.Translation>> translations = httpClient
        .get(String.format("%s/translations/%s", endpoint, translationGroup), Function.identity())
        .flatMap(it -> it.receive().aggregate().asByteArray())
        .map(byteArray -> {
            try {
                return objectMapper.readValue(byteArray, Translations.class);
            } catch (IOException e) {
                throw new UncheckedIOException("Failed to get translation for " + translationGroup, e);
            }
        })
        .map(Translations::getTranslations)
        .retryWhen(it -> it.delayElements(Duration.ofMillis(200)))
        .cache(Duration.ofMinutes(5))
        .timeout(Duration.ofSeconds(10));

但它编译得很好

@Getter(lazy = true)
Mono<Map<String, Translations.Translation>> translations = Mono.just(new byte[]{})
        .map(byteArray -> {
            try {
                return objectMapper.readValue(byteArray, Translations.class);
            } catch (IOException e) {
                throw new UncheckedIOException("Failed to get translation for " + translationGroup, e);
            }
        })
        .map(Translations::getTranslations)
        .retryWhen(it -> it.delayElements(Duration.ofMillis(200)))
        .cache(Duration.ofMinutes(5))
        .timeout(Duration.ofSeconds(10));

如何知道哪里出了问题以及如何解决?

最佳答案

我建议将初始化代码移到一个单独的方法中。

@Getter(lazy=true)
SomeType t = <complicatedInitializationCode>;

成为

@Getter(lazy=true)
SomeType t = initializeT();

private SomeType initializeT() {
    return <complicatedInitializationCode>;
}

披露:我是 lombok 开发者。

关于java - 在 java 10 中使用 lombok.Getter(lazy = true) 时出现不兼容类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52101387/

相关文章:

intellij-idea - 由于 Lombok 用法,无法在 Intellij Idea 13 EAP/12.1.5 中编译项目

Javadocs 没有出现在 java 10 的 Apache netbeans 上

Java:在js代码中回车填充var?

java - 使用带有继承的 Jackson 将字符串映射到对象

java - Java 中传统 for 循环与 Iterator/foreach 的性能对比

java - 创建具有相同值的多个对象时重用构建器实例是否可以接受?

java - 为什么可选的 Long/Double 和 orElseThrow?

Java 10 中的 javax.xml.stream 和 javax.xml.transform.stream

JavaFX:使用音频的 URL 源

java - 将 HTML 符号转换为 Java 符号