闲人野居
好好学习,天天向上
posts - 57,  comments - 137,  trackbacks - 0
    几天前遇到这么一个问题,让我郁闷了半天。当初为了方便定义了以下的一个接口:
public interface IBusinessObject<PK extends Serializable> extends Serializable {
    PK getPrimaryKey();
    
void setPrimaryKey(PK id);
}

在我的子类中是这么实现的
public class Code implements IBusinessObject<Long>{
 
private Long primaryKey;
 
public void setPrimaryKey(Long id){
    
this.primaryKey=id;
 }
 
public Long getPrimaryKey(){
    
return primaryKey
 }
}


在通常的实例化过程中,是不会存在问题的。当时的问题是,我定义了另外一个类,用于引用Code
public class TestBean {
    
private Code code;
    
public void setCode(){}
    
public Code getCode(){}
}

当在spring环境中时,使用spring的bind类处理的时候,发现,我的code.primaryKey的类型居然为Serializable,而不是我想要的Long
当时以为其他地方搞错了,写了个简单的测试代码
TestBean b=new TextBean();
BeanWrapperImpl wrapper
=new BeanWrapperImpl(b);
b.setPropertyValue(
"code.primaryKey","1");
assertTrue(b.getCode().getPrimaryKey() 
instanceof Long);

居然是失败的。
只有在
b.setPropertyValue("code.primaryKey",new Long(1));
assertTrue(b.getCode().getPrimaryKey() 
instanceof Long);

才成功。
仔细跟踪,发现原来,泛型的时候,产生的编译类中,有两个同名的方法
 public void setPrimaryKey(Long id){
    
this.primaryKey=id;
 }
 
public Long getPrimaryKey(){
    
return primaryKey
 }

 
public void setPrimaryKey(Serializable id){
    
this.primaryKey=id;
 }
 
public Serializable getPrimaryKey(){
    
return primaryKey
 } 

而java.beans规范对于这种情况是没有办法分清楚,所以也就导致了结果和预期的不同。
如果是在程序中,这点算不了问题。可是我需要在web的页面上进行值的绑定,而输入的东西,只能为字符串。所以不可能出来Long类型。
目前,采用了一种比较傻的办法,在TestBean中增加了一个临时变量x,通过x向code传值
如下:
public void setWsCode(String wsCode) {
        
this.wsCode = wsCode;
        
if (StringUtils.isNumeric(wsCode))
            
this.code.setPrimaryKey(NumberUtils.toLong(wsCode));
}

不知道还有没有其他好的解决方案。


posted on 2007-04-17 08:22 布衣郎 阅读(1565) 评论(1)  编辑  收藏 所属分类: jdk相关

FeedBack:
# re: 用泛型时遇到的尴尬问题
2007-04-17 17:57 | aaa
确实是个问题,hibernate映射的时候必须指定类型为Long,不然就被认成Serialiazable,xwork2的ValueStack是可以认出来精确的类型,但是在jdk6.0下面还是不行.
应该用java.lang.reflection.Method.getGenericReturnType()而不是用getReturnType()  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 

<2007年4月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

常用链接

留言簿(12)

随笔分类(59)

随笔档案(57)

blog

java

uml

搜索

  •  

积分与排名

  • 积分 - 356392
  • 排名 - 155

最新评论

阅读排行榜

评论排行榜