如何在Java中扩展final类

2024-01-15

这是我现在面临的实际问题。 我有课,比方说Foo这个类定义了一个名为的方法getBar返回一个Bar实例。班上Bar被定义在里面Foo并且 并 被声明public static final。我想做的是定义一个类MyFoo延伸Foo但我也想延长Bar with MyBar通过添加我自己的功能(方法、属性等)。 我也想要getBar回来MyBar.

问题是Bar是最终的。这是我想要做的事情的说明:

public class Foo {

  Bar bar = new Bar();

  public Bar getBar(){
      return bar;
  } 

   ....

   public static final class Bar {

    } 
}

我想做的是:

public class MyFoo extends Foo {


   public MyBar getBar(){ // here I want to return an instance of MyBar

   }

  public static final class MyBar extends Bar { // That's impossible since Bar is final

  } 
}

我怎样才能做到这一点?

[编辑]我正在为我的问题添加更多细节。 我实际上正在为 Jenkins 开发一个插件,经过搜索,我意识到有一个插件可以提供我想做的基本功能,Foo and Bar。我要定制Foo and Bar,所以它可以满足我的需求。 Foo 是插件的主类,并扩展了一个名为 Builder 的类。 Foo 定义了一个名为perform其中包含执行构建的所有操作。Bar包含用于配置目的的操作,并且 Foo 需要 Bar 来获取这些信息。

所以我想做的是将 Foo 扩展为MyFoo并添加一些配置MyBar。正如你所看到的,MyFoo需要通过调用来获取这些配置getBar();

第二件事是我无法控制实例化MyFoo and MyBar

阻碍我的是我无法扩展 Bar。我怎样才能做到这一点?


基本上你不能。看起来像是开发商设计的Bar旨在不扩展它 - 所以你不能扩展它。您需要寻找一种不同的设计 - 可能是一种不太使用继承的设计......当然,假设您无法更改现有代码。

(如果不了解这里的真正目标——整个系统的设计,就很难给出更具体的建议。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Java中扩展final类 的相关文章

随机推荐

  • Android @Override 用法[重复]

    这个问题在这里已经有答案了 Java 新手 C 老手 我注意到很多使用 Override在 Android 示例代码中 我认为所有 Java 方法默认都是 虚拟 的 然后做什么 Override do 例子 private class He
  • 绝对位置+滚动

    与以下HTML and CSS container position relative border solid 1px red height 256px width 256px overflow auto full height posi
  • 如何将 InMemoryUploadedFile 的内容转换为字符串

    有谁知道如何转换上传文件的内容 InMemoryUploadedFile 在 Django2 中转换为字符串 我想知道下面的内容怎么写convert2string uploaded file request FILES file my xm
  • 无法在 Mac OSX 上安装 PG gem

    我创建了一个新的 Rails 应用程序 rails new d postgresql 但是 我无法安装 pg gem 我之前使用brew安装了postgres 它会随着我的Mac自动启动 我已经尝试过在此处发布的几件事 我正在使用红宝石2
  • 如何生成具有泊松分布的离散随机事件?

    我知道 Knuth 的生成随机泊松分布数的算法 下面在 Java 中 但是我如何将其转换为调用方法 generateEvent 随时间随机 int poissonRandomNumber int lambda double L Math e
  • Python IDLE 无法在 Windows 7 上启动

    我曾经使用Python 2 7 然后IDLE就可以工作了 我卸载了它并安装了Python 3 1 现在 Idle 无法启动 我应该做什么才能让它运行 笔记 我尝试了 c Python31 pythonw exe c Python31 Lib
  • PHP DOM 中无效 XML/HTML 的问题

    假设您有以下 HTML 你想将它加载到 PHP DOMDocument 对象中 你应该怎么做 如果你使用 doc gt loadHTML 就会出现这样的问题 div 是在里面 div
  • Python-创建表

    我是一个处于早期阶段的Python用户 我有 1850 年至 2010 年特定地点的两个温度数据集 整个期间每个月都有一个温度值 我正在尝试使用以下给定格式的这些值创建一个表 T是我的数据 year data JAn FEB MAR APR
  • 使用存储库模式时的 MongoDB 和大型数据集

    好的 在工作中我们正在使用 MVC C 和 MongoDB 开发一个系统 当第一次开发时 我们决定遵循存储库模式可能是一个好主意 真是太痛苦了 下面的代码可以让您了解当前实现的内容 MongoRepository 类 public clas
  • NOT NULL 约束失败 Django CreateView

    我想在这个项目上实现两个目标 首先 我想将登录用户保存为审阅者 其次 我想将外键中的律师值传递到审核表单中 这样 用户可以点击律师详细信息页面上的审查链接进行审查 并审查该律师而不是其他人 我一直在实现第一个目标 但出现了这个错误 erro
  • Java - Jackson 嵌套数组

    鉴于以下数据 version 1 data 1 2 3 4 5 6 我尝试了以下定义并使用ObjectMapper readValue jsonstring Outer class class Outer public int versio
  • 在 django 后端自动增加新发票的发票编号

    我想自动递增发票号码 即 3 位字符和 4 位数字 class Invoice invoice no models CharField max length 500 null True blank True validators Regex
  • ChoiceField.choices 可调用对象如何知道要返回哪些选项?

    在 Django 1 8 中 ChoiceField s choices参数可以接受可调用的 def get choices return 1 one 2 two class MyForm forms Form my choice fiel
  • 不会向内部用户发送 TestFlight 邀请电子邮件

    我为 TestFlight 设置了我的应用程序 对于外部用户 它正在等待审核 但如果我想邀请内部用户 我会选择他们并按邀请 iTunes Connects 表示他们现在已收到邀请 但受邀请的电子邮件均未收到邀请电子邮件 你知道我做错了什么吗
  • GRAV 子导航

    我尝试制作我的第一个网站GRAV http getgrav org内容管理系统 现在在我的pages folder它看起来像这样 主页 默认 md about 关于 seite1 default md 关于 seite2 default m
  • 带工具提示的 WPF 自定义验证器

    我想为我的 WPF 应用程序创建一个自定义验证器模板 我有一个工具提示模板
  • Linq2Sql 将记录插入相关表

    类似情况 如何使用 LINQ2SQL 添加多个相关记录 https stackoverflow com questions 630320 how to add several dependent records with linq2sql
  • 这里 JavaScript API 3.0 - 如何实现可拖动标记

    我想用最近发布的 JavaScript API 3 0 实现一个可拖动标记 使用旧的 API 非常简单 将draggable 属性设置为true 后 您可以移动地图上的标记 位于 此处 1 的新 API 3 0 的迁移指南指出 在地图对象上
  • 为什么 Android 上的 Chrome 原生 HTML5 日期选择器变得非常慢?

    我的网站上有一个日期选择器 它只使用默认的 html5 日期选择器 我注意到 直到几周前 它都工作正常 但自从 Chrome Android 最近更新后 他们引入了一个新的日期选择器 而这个日期选择器真的很慢而且反应迟钝 加载需要几秒钟 我
  • 如何在Java中扩展final类

    这是我现在面临的实际问题 我有课 比方说Foo这个类定义了一个名为的方法getBar返回一个Bar实例 班上Bar被定义在里面Foo并且 并 被声明public static final 我想做的是定义一个类MyFoo延伸Foo但我也想延长