java - 扩展由另一个类实例化的类

标签 java constructor extends

我正在使用一个 Java API,该 API 用于“宏”,可自动执行一个软件。 API 具有类 Simulation(一种全局状态)和 FunctionManager。我无法修改这些类。

我想制作一个 BetterFunctionManager 类,它 extends FunctionManager 因为后者缺少一些有用的功能。但是我不知道该怎么做,因为不能直接实例化FunctionManager。它必须从 Simulation 中获取,如下所示:

Simulation simulation = getCurrentSimulation();
FunctionManager functionManager = simulation.getFunctionManager();

请注意,Simulation 也不能直接实例化;它必须通过 getCurrentSimulation() 获取(当前模拟由宏解释器在运行时确定)。

我不能沮丧;以下抛出 ClassCastException:

BetterFunctionManager betterFunctionManager = simulation.getFunctionManager();

如何构建BetterFieldFunctionManager

最佳答案

免责声明:我对设计还是很幼稚。只是一个建议。使用 delegation design pattern

public class BetterFunctionManager{
    private FunctionManager fm;
    public  BetterFunctionManager(FunctionManager fm){
        this.fm = fm;
    }

    existingMethods(){
        fm.existingMethods();
    }

    newMethods(){
        // new implementation
    }
}

缺点:

需要包装FunctionManager的所有方法

优点:

其他地方不用改。就像改变一样

BetterFunctionManager betterFunctionManager = 
                 new BetterFunctionManager (simulation.getFunctionManager());

关于java - 扩展由另一个类实例化的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16814083/

相关文章:

java - 文本 "<? >"有什么特殊含义吗?

java - BigDecimal 行为怪异

java - JDBI对象参数

Java计算字符串中某个单词的出现次数

java - 在 SSLHandshake 期间如何处理警告和致命警报

javascript - Javascript中构造对象的两种方式

java - 使用构造函数扩展类

kotlin - Kotlin数据类无法初始化父类的属性

java - 扩展外部类在java中如何工作

c++ - 在异常 C++ 中抛出语法