首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MapStruct和不可变

MapStruct和不可变
EN

Stack Overflow用户
提问于 2020-07-09 12:13:21
回答 1查看 100关注 0票数 0

我在使用mapstruct和不可变函数时遇到了麻烦。

代码语言:javascript
复制
@Value.Immutable
public abstract class FoobarValue {
    public abstract Integer foo();
}
代码语言:javascript
复制
@Value.Immutable
public abstract class TargetFoo {
    public abstract Integer foo();
}
代码语言:javascript
复制
@Mapper
public interface ImmutableMapper {

    ImmutableMapper INSTANCE = Mappers.getMapper(ImmutableMapper.class);

    public TargetFoo toTarget(FoobarValue foobarValue);
}

要测试的主类

代码语言:javascript
复制
public class FoobarValueMain {
    public static void main(String... args) {
        FoobarValue value = ImmutableFoobarValue.builder()
                .foo(2)
                .build();
        ImmutableMapper mapper = ImmutableMapper.INSTANCE;
        System.out.println(mapper.toTarget(value).foo());
    }
}

我得到的错误是

代码语言:javascript
复制
Exception in thread "main" java.lang.IllegalStateException: Cannot build TargetFoo, some of required attributes are not set [foo]
    at org.play.ImmutableTargetFoo$Builder.build(ImmutableTargetFoo.java:158)
    at org.play.ImmutableMapperImpl.toTarget(ImmutableMapperImpl.java:21)
    at org.play.FoobarValueMain.main(FoobarValueMain.java:12)

我的build.gradle如下

代码语言:javascript
复制
ext {
    mapstructVersion = "1.4.0.Beta2"
    immutablesVersion = "2.8.2"
}

dependencies {
    annotationProcessor "org.immutables:value:$immutablesVersion" // <--- this is important
    annotationProcessor "org.mapstruct:mapstruct-processor:1.4.0.Beta2"

    compileOnly "org.immutables:value:$immutablesVersion"
    implementation "org.mapstruct:mapstruct:${mapstructVersion}"

    testCompile group: 'junit', name: 'junit', version: '4.12'
}

根据reference的说法,这应该都是开箱即用的。这里我漏掉了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-11 16:06:53

它不工作的原因是因为您没有使用JavaBean约定。

您需要在方法前面加上get前缀

例如:

代码语言:javascript
复制
@Value.Immutable
public abstract class TargetFoo {
    public abstract Integer getFoo();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62807301

复制
相关文章

相似问题

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