我有这些课程
public abstract class Unit
{
public abstract UnitType getType();
...
}
public class Item extends Unit
{
protected ItemType type;
@Override
public ItemType getType()
{
return type;
}
public void setType(ItemType type)
{
this.type = type;
}
...
}
显然ItemType
延伸UnitType
.
我得到:
javax.el.PropertyNotWritableException: /WEB-INF/facelets/general.xhtml @23,165 value="#{bean.item.type}": The class 'com.example.Item' does not have a writable property 'type'.
我可以理解协变返回类型可能会混淆 EL (2.2),所以这是一个错误吗?
我可以使用解决这个问题
- generics
- 将 setType 签名更改为
public void setType(UnitType type)
并检查里面的instanceof
- 更改方法名称以避免覆盖
有没有真正的解决方案而不是解决方法?
似乎java.beans.Introspector
负责。 Java 中有很多相关的错误:7092744 http://bugs.java.com/bugdatabase/view_bug.do?bug_id=7092744, 7122138 http://bugs.java.com/bugdatabase/view_bug.do?bug_id=7122138, 6528714 http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6528714, 6794807 http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6794807, 6788525 http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6788525。由于合成桥接方法,协变返回类型和泛型会出现问题。对于一些 Java 7 更新(45、51、67、71),问题表现得不正确,但在运行服务器一段时间后 - 这可能与 Introspector 和相关类中的软/弱引用缓存有关。
所有这些问题似乎都在 Java 1.7.0_80 中得到了修复(使用 Mojarra 2.2.8 和 Wildfly 8.2.0.Final 进行了测试)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)