当前位置: 首页 > 面试题库 >

如何在Java中扩展最终课程

苏健柏
2023-03-14
问题内容

这实际上是我现在面临的问题。我有一个类,可以说Foo该类定义了一个getBar返回Bar实例的方法。该类Bar在内部定义Foo并声明public static final。我想要做的就是定义一个类MyFoo扩展Foo,但我也想对BarMyBar加入我自己的功能(方法,属性等)。我也想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并且Bar。我想自定义FooBar,因此它可以满足我的需求。Foo是插件的主要类,它扩展了一个名为Builder的类。Foo定义了一个名为的方法perform,其中包含执行构建的所有操作。
Bar包含用于配置目的的操作,并且Foo需要Bar来获取这些信息。

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

第二件事是我没有的instanciation的控制MyFooMyBar

阻碍我的是,我无法扩展Bar。我该如何实现?


问题答案:

基本上不能。看起来像是Bar为不进行扩展而设计的开发人员-因此您无法扩展它。您将需要寻找一种不同的设计-
可能是一个没有太多使用继承的设计…当然,假设您无法更改现有代码。

(在不了解此处的真正目标-整个系统的设计的情况下,很难给出更具体的建议。)



 类似资料:
  • 在可能的副本上: 此线程不是在询问如何扩展类。它问为什么一个声明为的类可能会扩展另一个类。 从该线程: <code>final</code>类只是一个不能扩展的类。 但是,我有一个帮助程序类,我声明它是,并了另一个类: Eclipse没有检测到任何错误。我已经测试了这个类,并且PDF是成功生成的,没有错误。 为什么我能够课程,而理论上我不应该延长? (如果重要的话,我正在使用Java7。)

  • 问题内容: 我上了最后一堂课,像这样: 我在其他这样的班级中使用这个班级: 在我的JUnit测试类中,Seasons.java我想模拟RainOnTrees该类。我该如何使用Mockito做到这一点? 问题答案: 仅在Mockito v2中可以模拟最终/静态类/方法。 将此添加到你的gradle文件中: 使用Mockito常见问题解答中的 Mockito v1,这是不可能的: `What are

  • 我有一个. JAR文件,里面有很多类。第一,我需要的设置为final,所以我不能扩展它。有一种方法,我基本上必须扩展和修复,否则一切都会崩溃。我该怎么做呢?我知道反射和Javassist可以用来做这件事,但是我不知道怎么做。其他任何工具也是可以接受的,只要能用就行。

  • 问题内容: 我的问题很简单: 编译器是否将final类中的所有方法都视为final本身?将关键字添加到最终类中的方法是否有效果? 我知道最终方法更有可能被内联,这就是我要问的原因。 提前致谢。 问题答案: 没错,final类中的所有方法都隐式为final。 看这里: “请注意,您也可以将整个类声明为final。声明为final的类不能被子类化。例如,在创建不可变类(如String类)时,这特别有用

  • 有没有办法从JavaScript(Nashorn)中获取和使用扩展Java类? 我试图做的是在Nashorn中扩展一个Java类,然后将其传递回Java。例如,我们在JS中定义了一个类来扩展另一个类: 然后我试图得到这个扩展的对象在Java像这样: 然而,我无法在Java中对此对象进行任何方法调用。当我试图将其转换为基类时,它总是抛出异常。测验SomeClass。 是否可以在Java中使用在Nas

  • 这是我现在面临的问题。我有一个类,假设 ,这个类定义了一个名为 的方法,该方法返回一个 实例。类 在 内部定义,并被声明为。我想做的是定义一个扩展的类,但我也我自己的功能(方法,属性等)来扩展。我也希望返回。 问题是< code>Bar是最终的。下面是我想做的一个例子: 我想做的是: 我怎样才能做到这一点? [编辑]我正在为我的问题添加更多详细信息。我实际上正在为 Jenkins 开发一个插件,搜