gpt4 book ai didi

java - 扩展由java中的静态方法返回的对象

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:18:51 27 4
gpt4 key购买 nike

我有以下问题。

我有一个库类的静态方法(我无法更改),如下所示:

Loader.loadModel()

它返回一个模型类型的对象。

我还创建了一个名为 ExtendedModel 的模型子类,它向模型添加了一些方法和一些字段。

我做不到:

ExtendedModel m = Loader.loadModel() //compiler error
ExtendedModel m = (ExtendedModel) Loader.loadModel() //ClassCastException at runtime

因为在 Java 中你不能将父类(super class)的对象分配给子类。

但是,我想知道:哪种方法是向 Loader.loadModel() 返回的对象添加方法和字段的最佳方式

最佳答案

虽然您添加了一个新类,但您没有该类的新实例。为了能够使用模型的附加方法和字段,您需要有一个 ExtendedModel 实例; Loader.loadModel() 返回“常规”Model 的实例,从而导致问题。

要扩展对象的功能,您需要编写包装器类。包装器通常采用“基”类的对象,将基本功能委托(delegate)给它,并添加一些它自己的方法/变量:

public class ExtendedModel : Model {
private final Model wrapped;
public ExtendedModel(Model model) { wrapped = model; }
private int addedField = 123;
// Methods of the Model that you did not change simply forward the calls:
public void doSomething() { wrapped.doSomething(); }
public int calculateSomething() { return wrapped.calculateSomething(); }
// Extended methods do whatever you need them to do:
public int getAddedField() {return addedField;}
public void increment() {addedField++;}
}

现在您可以像这样创建 ExtendedModel 的实例:

ExtendedModel m = new ExtendedModel(Loader.loadModel());

关于java - 扩展由java中的静态方法返回的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15458679/

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