EL 和协变返回类型

2024-02-02

我有这些课程

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. generics
  2. 将 setType 签名更改为public void setType(UnitType type)并检查里面的instanceof
  3. 更改方法名称以避免覆盖

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


似乎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(使用前将#替换为@)

EL 和协变返回类型 的相关文章

随机推荐

  • apt-get update' 返回一个非零代码:100

    我正在尝试从我的 docker 文件创建一个 docker 映像 其中包含以下内容 FROM ubuntu 14 04 4 RUN echo deb http private repo 1 hortonworks com HDP ubunt
  • Objective C HTML 转义/unescape

    想知道是否有一种简单的方法可以在 Objective C 中执行简单的 HTML 转义 unescape 我想要的是这样的伪代码 NSString string lt span gt Foo lt span gt string string
  • pandas read_csv 修复列以读取数据中带有换行符的数据

    使用 pandas 读取大型制表符分隔文件 df pd read csv file path sep t encoding latin 1 dtype str keep default na False na values 问题是有 200
  • python yield 和 stopiteration 在一个循环中?

    我有一个生成器 我想在其中向实际内容添加初始值和最终值 如下所示 any generic queue where i would like to get something from q Queue def gen header somet
  • 如何将 Yii 1.x 升级到 Yii 2.0?

    如何将 Yii 1 x 版本升级到 Yii 2 0 最新版本 我正在使用一个Ubuntu https en wikipedia org wiki Ubuntu 28operating system 29操作系统 将我的旧 Yii 更新到新
  • 如何正确连接Bitbucket和Jenkins

    大约 1 周以来 Bitbucket 没有 向我的 Jenkins 服务器发送请求 我已经将其全部设置如下 Endpoint http username apitoken jenkinshost username Jenkins 中的用户名
  • Facebook 登录 CallbackManager FacebookCallback 未调用?

    我尝试使用 LoginButton 登录 但未调用登录回调 LoginButton 在片段中 FacebookSdk sdkInitialize在Application onCreate中被调用 登录完成后不会调用任何回调 这是代码 活动
  • 在 WPF 中以编程方式创建 ControlTemplate

    如何以编程方式设置按钮的模板 Polygon buttonPolygon new Polygon buttonPolygon Points buttonPointCollection buttonPolygon Stroke Brushes
  • Apache Spark 与 Python:错误

    Spark 新手 下载一切正常 但当我运行 pyspark 时 出现以下错误 Type help copyright credits or license for more information Using Spark s default
  • 具有多个应用程序的 Django 打包项目

    我正在尝试打包我的 Django 项目 但没有成功 我的项目如下所示 dsbg manage py dsbg init py urls py wsgi py app1 init py models py views py urls py a
  • ASP.Net应用程序的安全部署[重复]

    这个问题在这里已经有答案了 可能的重复 如何以零停机时间部署 ASP NET 应用程序 https stackoverflow com questions 148084 how to deploy an asp net applicatio
  • unique_ptr 提升等效吗?

    boost 库中是否有 C 1x 的 std unique ptr 的等效类 我正在寻找的行为是能够拥有一个异常安全的工厂函数 就像这样 std unique ptr create base return std unique ptr ne
  • 类似 Prezi 的网络界面。 Flash 还是 HTML5?

    我想编写一个用户体验类似于 Prezi com 的 Web 界面 为此目的最好的技术是什么 项目要求 快速实施 这是一个演示 我希望有一个粗略的估计 大量数据 需要动态内容加载 卸载 我的自然选择是 Flash 和 HTML5 Prezi
  • Microsoft JScript 运行时错误:无法设置属性“control”的值:对象为 null 或未定义

    I am Developing a web application by using ASP NET 3 5 jQuery and RadAjax Telerik Control I get Error Messages when page
  • Javascript 将 onclick 事件附加到所有链接

    我想在网站上的每个链接上附加一个函数来更改参数 如果没有 jQuery 我该如何做到这一点 如何遍历每个链接 可能是 DOM 项 并调用它们的函数 奇怪的是没有人提供使用事件冒泡的替代解决方案 function callback e var
  • Flask - 无法使用其他文件中的 Flask 和 Flask-mail 实例

    我目前正在使用 Flask 构建一个应用程序 我正在努力访问 Flask 实例 app 以及 Flask mail 实例 mail 下面是我的项目的样子 my project application init py admin init p
  • SWT 复合 - 重绘问题

    我有一个复合元素 最初有一个标签 现在 我对其 标签 调用 dispose 并在同一容器 复合榆树 中创建另一个标签 但我没有看到新文本 这让我想到如何在复合材料上启用重绘 以便新标签 或我可能创建的任何其他组件 将代替旧标签进行渲染 这是
  • 为什么要使用 String.Equals 而不是 == ? [复制]

    这个问题在这里已经有答案了 我最近接触到了一个大型代码库 并注意到所有字符串比较都是使用String Equals 代替 您认为这是什么原因 很可能大部分开发人员都具有 Java 背景 其中使用 比较字符串是错误的并且不起作用 在 C 中
  • Spring Boot 消耗过多 RAM

    我在 Spring Boot 中创建了一些服务 我有 11 个 fat jar 并将它们部署在 docker 容器中 我怀疑每个 jar 都消耗了 1 到 1 5 GB 的 RAM 而没有任何使用 我通过运行以下命令来检查 RAM dock
  • EL 和协变返回类型

    我有这些课程 public abstract class Unit public abstract UnitType getType public class Item extends Unit protected ItemType typ