@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 生成的那个。
我有这个 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 生成的那个。