Jsf 2 EL和协变返回类型

Jsf 2 EL和协变返回类型,jsf-2,el,covariance,Jsf 2,El,Covariance,我有这些课程 public abstract class Unit { public abstract UnitType getType(); ... } public class Item extends Unit { protected ItemType type; @Override public ItemType getType() { return type; } public void setTy

我有这些课程

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),所以这是一个bug吗

我可以使用

  • 仿制药
  • 将setType签名更改为
    公共无效setType(UnitType类型)
    ,并检查instanceof INDER
  • 更改方法名称以避免重写

  • 有没有真正的解决方案而不是变通办法?

    看起来像是
    java.beans。内省者负责。Java中有很多相关的bug:
    , , . 由于合成桥方法,协变返回类型和泛型存在问题。对于一些Java 7更新(45、51、67、71),问题不是以正确的方式表现出来的,而是在运行服务器一段时间之后——这可能与内省和相关类中的软引用/弱引用缓存有关

    所有这些问题似乎都在Java 1.7.0_80中得到了解决(使用Mojarra 2.2.8和Wildfly 8.2.0.Final进行了测试)。

    可能与