定义了一个父类一个子类
public class MSGVO {
private long msgId;
public long getMsgId() {
return msgId;
}
public void setMsgId(long msgId) {
this.msgId = msgId;
}
}
public class ParamMsgVO extends MSGVO {
public void setMsgId(String maxId) {
if (StringUtils.isNotEmpty(maxId)) {
setMsgId(Long.parseLong(maxId));
}
}
}
然后在调用paramMsgVO.setMsgId(maxId);的时候偶尔会报
[ERROR][2013-07-26 00:18:16,099]Illegal overloaded setter method for property msgId in class com.hisense.hitv.msgpullservice.service.beans.ParamMsgVO. This breaks the JavaBeans specification and can cause unpredicatble results.
这个写有什么问题吗?为什么不是每次都报错?
编写javabean就是编写一个java的类,所以你只要会写类就能编写一个bean,这个类创建的一个对象称做一个bean。为了能让使用这个bean的应用程序构建工具(比如JSP引擎)知道这个bean的属性和方法,只需在类的方法命名上遵守以下规则:
1. 如果类的成员变量的名字是xxx,那么为了更改或获取成员变量的值,即更改或获取属性,在类中可以使用两个方法:
getXxx(),用来获取属性xxx。
setXxx(),用来修改属性xxx.。
2. 对于boolean类型的成员变量,即布尔逻辑类型的属性,允许使用"is"代替上面的"get"和"set"。
3. 类中访问属性的方法都必须是public的,一般属性是private的。
4. 类中如果有构造方法,那么这个构造方法也是public的并且是无参数的。
标准的javabean 一个属性对应两个方法:getXxx(),用来获取属性xxx。
setXxx(),用来修改属性xxx.。
当你调用ParamMsgVO的setMsgId的时候有些按照标准的javabean规则设计的框架调用的时候可能会迷茫采用这两个方法中的哪一个而报错
代码没有问题,人品有问题 :shock:
单从代码上来看是OK的。请注意报错内容:非法重载setter方法,违反了javabean规则,导致不可预测的结果。所以,当ParamMsgVO为普通java类时,是ok的,但是如果认为ParamMsgVO是一个javabean了,那么就会出现上述错误,因为它违反了bean规则。
可能是这样,你在普通调用时候没有错,但是在使用hibernate之类的框架的时候,通过反射或者其他方式赋值,会导致出错