【问题标题】:How can I generate both standard accessors and fluent accessors with lombok?如何使用 lombok 生成标准访问器和流利访问器?
【发布时间】:2016-04-12 05:17:31
【问题描述】:

我试过了。

@lombok.Getter
@lombok.Setter
@lombok.Accessors(chain = true, fluent = true)
private String prop;

并且@Accessor 优先,不会生成getPropsetProp

我怎样才能让它生成这个?

public String getProp() {
    return prop;
}
public String prop() {
    //return prop;
    return getProp(); // wow factor
}
public void setProp(String prop) {
    this.prop = prop;
}
public Some prop(String prop) {
    //this.prop = prop;
    setProp(prop); // wow factor, again
    return this;
}

【问题讨论】:

    标签: java accessor lombok


    【解决方案1】:

    不幸的是,这是不可能的。您需要实现自己的 getter 和 setter,并添加 @Getter @Setter 和 @Accessors(fluent = true) 注释来实现这一点。

    @Getter
    @Setter
    @Accessors(fluent = true)
    public class SampleClass {
        private int id;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    }
    

    结果你会有这样的类:

    public class SampleClass {
        private int id;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public int id(){
            return id;
        }
    
        public SampleClass id(int id){
            this.id=id;
            return this;
        }
    }
    

    【讨论】:

    • 聚会有点晚了。发现在下面的组合中使用Lombok注解不需要添加setter和getter。所以在上面的例子中,getId() 和 setId(...) 可以省略。 @Data @Accessors(fluent = true)
    • @mornejvr 我尝试了您的建议,但使用 Lombok 版本 1.6.12 时出现错误“找不到符号 setFirstName(java.lang.String)”,您使用的是哪个版本?
    • @Bruno,我使用的是 1.18.8。可能它只适用于较新版本的龙目岛
    • 我更喜欢使用 @Data 而不是 getter 和 setter,但请注意,您获得的不仅仅是 getter 和 setter。至少在我使用库的这些年里,我总是从 Data 提供的东西中受益。
    【解决方案2】:

    恐怕你不能。

    来自doc(重点是我的):

    @Accessors 注解用于配置 lombok 如何生成和查找 getter 和 setter。

    所以@Accessors 不会生成任何东西,它只是配置@Getter@Setter 的一种方式。


    如果你真的想要流畅的普通的getter/setter,你可以(手动)添加普通的并让它们委托给流畅的。

    【讨论】:

      【解决方案3】:
      @Accessors(chain = true)
      @Setter @Getter
      public class Person {
          private String firstName;
          private String lastName;
          private int height;
      }
      
      ....
      
      @Test
      public void testAccessors() {
          Person person = new Person();
      
          person.setFirstName("Jack")
              .setLastName("Bauer")
              .setHeight(100);
      
          assertEquals("Jack", person.getFirstName());
          assertEquals("Bauer", person.getLastName());
          assertEquals(100, person.getHeight());
      }
      

      【讨论】:

      • 问题是如何获得普通的 getter\setter 和流利的版本。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-10
      • 2015-01-03
      • 2017-12-04
      • 1970-01-01
      • 2013-09-26
      • 1970-01-01
      相关资源
      最近更新 更多