论坛首页 入门技术论坛

blazeds (java boolean类型) 慎用eclipse的自动getter,setter

浏览 3595 次
该帖已经被评为新手帖
作者 正文
   发表时间:2009-06-05   最后修改:2009-06-08

标题有点大,但确实因为这个自动getter让我查代码查了几天,差点要改实现方法了.

 

为简化,对应VO就不贴出来了

 

java pojo:

 

/**
*为简化,只列举两个字段
*/
public class WestMedicationBo  implements Serializable
{
	private static final long serialVersionUID = 1L;
	private boolean isPaid;
	private long rpId;

//以下是用eclipse自动自动getter,setter得到,主要注意boolean类型
          public boolean isPaid() {
		return isPaid;
	}

	public void setPaid(boolean isPaid) {
		this.isPaid = isPaid;
	}
//getter,setter....
}

 

使用BlazeDS与java交互,你会很郁闷的发现isPaid直接给它true,到前台也得到的只是false,开始还怀疑莫非boolean映射有问题?后来突然想到,amf将java数据反序列化回vo时,应该是直接调用java 对象的get方法,而将vo转换为java对象时则是调用setter。这里ide自动生成的getter,setter对boolean需要我们手动调整,将上面getter,setter代码改为:

 public boolean getIsPaid() {
     return isPaid;
 }

 public void setIsPaid(boolean isPaid) {
   this.isPaid = isPaid;
}

 即可实现java对象boolean和as boolean的双向映射了。郁闷之下,差点准备将几个boolean字段改为String来实现了.

ps:je的代码功能还需要加强,排版排了半天也还有问题,算了不排了

 

=================

写了个新手帖...

 

   发表时间:2009-06-05  
可以改用Boolean类型,应该就行了吧。
0 请登录后投票
   发表时间:2009-06-05  
问题在于你那个变量的开始是is,你把它改成如:
private boolean aisPaid; 
别的时它自动生成的get,set就是好的了
至于原因我也说不明白,
0 请登录后投票
   发表时间:2009-06-05  
习惯上我们设定get/setXXX时,如果是boolean型,一般getXXX都自动生成为isXXX。自动处理方法并没有错误。你这个是特殊情况特别解决。应该单独增加一个getXXX方法名。
0 请登录后投票
   发表时间:2009-06-06   最后修改:2009-06-06
lfrick 写道

可以改用Boolean类型,应该就行了吧。


老早试过了,不行的。
blazeDS它就是根据字段的getter,setter将数据反序列化装入vo中
0 请登录后投票
   发表时间:2009-06-06  
这变量命名就不合理
0 请登录后投票
   发表时间:2009-06-06  
dennis_zane 写道
这变量命名就不合理

变量名直接设成paid多好
使用自动生成,肯定要符合一定规则的
0 请登录后投票
   发表时间:2009-06-07  
gmizr 写道

dennis_zane 写道
这变量命名就不合理变量名直接设成paid多好 使用自动生成,肯定要符合一定规则的


以下是我重新命名并生成得到的代码,出来的结果还是一样。这是由于AMF反序列化回as 对象的机制决定的,跟变量命名没关系:

package cn.com.kerlon;

public class MyCls{
	private boolean paid;

	public boolean isPaid() {
		return paid;
	}

	public void setPaid(boolean paid) {
		this.paid = paid;
	}
	

}
0 请登录后投票
   发表时间:2009-06-07  
还真的 为什么boolean 一生成set get 就生错呢?
0 请登录后投票
   发表时间:2009-06-07  
whaosoft 写道
还真的 为什么boolean 一生成set get 就生错呢?

不是出错。这是Sun的编码规范中,读取boolean的方法不是以get开头而是以is开头。ActionScript中没有这个规则,进行序列化的时候找不到get方法是当然的。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics