Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了选择在运行时从java扩展的子类大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我有两个类(比如B& C),它们都来自一个类(比如说A).现在我需要编写一个类(比如D),它应该在运行时从B或C动态派生.

B,C& A是通过库提供给我的类,我控制的唯一类是D类.如何针对上述约束编写D.显然,B和C来自不同的供应商,因此需要在D中覆盖不同的方法,具体取决于它的父类.

不能写出不@R_388_11197@的D,它们将从B& C,因为覆盖方法在不同的方法名下具有相同的代码.

最佳答案
您应该定义一个接口I,然后定义对应于B和C的具体实现.在运行时,您可以使用工厂方法确定I的哪个实现是必要的.那么你的代码只需要调用I的方法而不是B或C的方法.

编辑

关于它是如何工作的似乎有些混乱.您想要的是您的业务逻辑在属于您的一致,稳定的API上运行.为此,您将创建一个我们称之为I的接口.现在您需要适应(A,B和C)所需的不同外部类的实现类.它可能看起来像这样

public interface I {
    void doSomething();
}

public class IA implements I {
    private A a;

    public IA(A a) {
        this.a = a;
    }

    public void doSomething() {
        // specific to A
        a.doSomethingUnique();
    }
}

// similar implementation classes for B and C

现在,您需要在运行时获取特定于当前情况的I实例.无论通知您何时在运行时使用哪个特定类都可以用于此目的.在最坏的情况下,你可以这样做:

// in some util class
public static I getI(Object obj) {
    if (obj instanceof A) {
        return new IA((A) obj);
    } else if (obj instanceof B) {
        return new IB((B) obj);
    } else if (obj instanceof C) {
        return new IC((C) obj);
    }
    // maybe throw an exception? or return a mock I implementation?
}

现在,您的所有业务逻辑仅引用I的实例并调用接口中定义的方法,从而抽象出您无法控制的不同具体类.

大佬总结

以上是大佬教程为你收集整理的选择在运行时从java扩展的子类全部内容,希望文章能够帮你解决选择在运行时从java扩展的子类所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。