ognl不支持泛型?

我为entity写了这样的接口


public interface Entity<T extends Serializable>{
public T getId();

public void setId(T id);

}



然后写了一个实现这个接口的user entity

public class User implements Entity<Long> {
private Long id;
private String name;

public Long getId() {
    return id;
}
public void setId(Long id) {
    this.id = id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}

}



然后当我用ognl设置user id 的值

User user = new User();
user.setName("test");
Ognl.setValue("id", user, "1");

运行这段代码总是抛错,说不能把string转换成Long类型
我发现问题的原因是,ognl读取user.id的write method时,得到的方法是

User.setId(java.io.Serializable)


而不是

User.setId(java.lang.Long)

所以ognl没有把字符串“1”转换成long型就直接转换调用user.setId方法了,所以抛出了java.lang.ClassCastException

有人遇到这种情况么?
怎么解决?
问题补充:
引用
泛型的规范里,好像只能用反射的方式得到<T extends Serializable>时,得到的是Serializable,而没有得到T,导致这种情况


引用

那按照上面的说法,能不能不用 T extends Serializable?直接一个T
因为Long 和 String 类型都是Serializable的啊


我试过了,也不行,我debug看到的ognl得到id的write methods是User.setId(java.lang.Object)

其实本来一直都工作好好的,后来就突然出现上面所说的错误了。
我测试了很久,发现出现了很多莫名其妙的情况,无法解释。
现在唯有抛弃这种泛型的设计了。
去掉了Entity接口,一切正常……
郁闷,实在搞不懂其中的缘故……

这还是泛型的规范问题,
如果你直接用T的话,它能得到的确定类型就只有Object,

你想想,对于这些一个类型T extends Serializable,没有明确指定类型之前,你是不可能知道T是什么类型,唯一能知道的就是T一定是Serializable类型,

对于只有T的情况,有个隐式的继承啊T extends Object ,道理同上

这样你应该就能理解OGNL为什么会出现这种情况

OGNL支持泛型操作的

泛型的规范里,好像只能用反射的方式得到时,得到的是Serializable,而没有得到T,导致这种情况

那按照上面的说法,能不能不用 T extends Serializable?直接一个T
因为Long 和 String 类型都是Serializable的啊