gpt4 book ai didi

jsf-2 - EL 和协变返回类型

转载 作者:行者123 更新时间:2023-12-02 03:47:29 24 4
gpt4 key购买 nike

我有这些类(class)

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

我可以使用

解决这个问题
  1. 泛型
  2. 将 setType 签名更改为 public void setType(UnitType type) 并检查 instanceof inside
  3. 更改方法名称以避免覆盖

是否有真正的解决方案而不是解决方法?

最佳答案

似乎 java.beans.Introspector 负责。 Java 中有很多相关的错误: 7092744 , 7122138 , 6528714 , 6794807 , 6788525 .由于合成桥方法,协变返回类型和泛型会出现问题。对于某些 Java 7 更新(45、51、67、71),问题表现不正确,但在运行服务器一段时间后 - 这可能与 Introspector 和相关类中的软/弱引用缓存有关。

所有这些问题似乎都已在 Java 1.7.0_80 中修复(使用 Mojarra 2.2.8 和 Wildfly 8.2.0.Final 进行测试)。

关于jsf-2 - EL 和协变返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16039396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com