@Data 注释无法设置 Java 中的值

@Data annotion not working to set the value in Java

我有这个 POJO class:

import lombok.Data;
import lombok.Getter;
import lombok.Setter;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import java.io.Serializable;

@Data
@XmlAccessorType(XmlAccessType.FIELD )
public class FulfillmentOrder implements Serializable {

    private static final long serialVersionUID = 1L;

    @XmlElement(name="orderNbr")
    Integer orderNbr;

    public Integer setOrderNumbr(Integer orderNbr) {
        this.orderNbr=orderNbr;
        return orderNbr;
    }
}

我正在尝试从另一个 class 设置 orderNbr 的值。

FulfillmentOrder fo= new FulfillmentOrder();
Integer orderNum = 
  fo.setOrderNumbr(89898989);

我正在尝试将 XML 输出中 orderNbr 的值更新为 89898,我想使用 @Data 来完成。

但是当我做 fo.setOrderNbr(89898989) 我得到一个编译时错误错误:(56, 132) java: 类型不兼容: void 不能转换为 java.lang.Integer,因为龙目岛 returns void.

`fo.setOrderNbr(89898989) 有什么方法可以更新值吗?

您的问题是您的 class 实际上有两个具有相同签名的方法。方法的签名是它的名称+参数。所以在你的情况下 setOrderNbr(Integer orderNbr)。 Return签名中不包含类型。

如 Javadoc 中所述,在同一个 class 中具有相同签名的方法是编译时错误。 https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.4.2

为了让 Lombok 完成工作 - 您需要删除方法 setOrderNbr(Integer orderNbr) 并调用来自 @Data 的 Lombok 生成的 setter。根据通常的编码惯例,它将具有相同的名称但没有 return 类型。

如果您坚持使用 setter 和 return 类型,您将必须自己定义它,但它必须具有不同的签名 - 在您的情况下,不同的名称不会与之冲突Lombok 使用@Data 生成的那个。