.png)
Cannot invoke setItemTitle(String) on the primitive type void
定义的实体类如下:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |   @Data  publicstaticclassRefundOrderItem implementsSerializable {    /**     * 商品标题     */    @JsonProperty("item_title")    privateString itemTitle;    /**     * 数量     */    privateBigDecimal quantity;    publicRefundOrderItem() {      super();    }    publicRefundOrderItem(String itemTitle, BigDecimal quantity) {      this.itemTitle = itemTitle;      this.quantity = quantity;    }  }} | 
这种写法不报错
| 1 2 | request.getItems().add(newRefundOrderItem(productPO.getName(), quantity)); | 
这种写法报错
| 1 2 | request.getItems().add(newRefundOrderItem().setItemTitle(productPO.getName()).setQuantity(quantity))); | 
在定义的实体类上加上注解:@Accessors(chain = true)
实体类代码如下:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | @Data  @Accessors(chain = true)  publicstaticclassRefundOrderItem implementsSerializable {    /**     * 商品标题     */    @JsonProperty("item_title")    privateString itemTitle;    /**     * 数量     */    privateBigDecimal quantity;    publicRefundOrderItem() {      super();    }    publicRefundOrderItem(String itemTitle, BigDecimal quantity) {      this.itemTitle = itemTitle;      this.quantity = quantity;    }  }} | 
Accessors翻译是存取器。通过该注解可以控制getter和setter方法的形式。
特别注意如果不是常规的get|set,如使用此类配置(chain = true或者chain = true)。在用一些扩展工具会有问题,比如 BeanUtils.populate 将map转换为bean的时候无法使用。具体问题可以查看转换源码分析
使用fluent属性,getter和setter方法的方法名都是属性名,且setter方法返回当前对象
| 1 2 3 4 5 | classDemo{    privateString id;    privateDemo id(String id){...}  //set    privateString id(){} //get} | 
使用chain属性,setter方法返回当前对象
| 1 2 3 4 5 | classDemo{    privateString id;    privateDemo setId(String id){...}  //set    privateString id(){} //get} | 
使用prefix属性,getter和setter方法会忽视属性名的指定前缀(遵守驼峰命名)
| 1 2 3 4 5 | classDemo{    privateString fid;    privatevoidid(String id){...}  //set    privateString id(){} //get} | 
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。