在我的表单中我有textField:
add(new TextField<String>("awayScore", new PropertyModel<String>(value, "awayScore") {
private static final long serialVersionUID = 1L;
@Override
public String getObject() {
logger.info("textField");
return super.getObject();
}
}));
你可以看到我只是添加了记录器。
我没有看到任何错误,但是当我运行我的应用程序时,我收到了这个错误:
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
at org.toursys.web.PlayOffPage$PlayOffForm$2$1$1.getObject(PlayOffPage.java:135)
第135行包含:
return super.getObject();
我真的很困惑,因为没有覆盖这个作品
更新:
当我将代码编辑为:
Object value = super.getObject();
logger.error(value.getClass() + "");
此代码返回:
class java.lang.Integer
这真的很奇怪,因为根据编译器,这应该返回String
答案 0 :(得分:2)
当您撰写new PropertyModel<String>(value, "awayScore")
时,您承诺awayScore
中的value
为String
。编译器无法验证您的声明,也没有自动转换。
在AbstractPropertyModel
中,方法getObject
被定义为返回T
,Object
将替换为String
。这就是它仍然有效的原因。一旦你重写方法以返回{{1}},演员表就会失败。