我为entity写了这样的接口
public interface Entity<T extends Serializable>{public T getId(); public void setId(T id);
}
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; }
}
User user = new User();
user.setName("test");
Ognl.setValue("id", user, "1");
User.setId(java.io.Serializable)
User.setId(java.lang.Long)
这还是泛型的规范问题,
如果你直接用T的话,它能得到的确定类型就只有Object,
你想想,对于这些一个类型T extends Serializable,没有明确指定类型之前,你是不可能知道T是什么类型,唯一能知道的就是T一定是Serializable类型,
对于只有T的情况,有个隐式的继承啊T extends Object ,道理同上
这样你应该就能理解OGNL为什么会出现这种情况
OGNL支持泛型操作的
泛型的规范里,好像只能用反射的方式得到时,得到的是Serializable,而没有得到T,导致这种情况
那按照上面的说法,能不能不用 T extends Serializable?直接一个T
因为Long 和 String 类型都是Serializable的啊