Java:使用符合我的接口(interface)的外部类

标签 java class interface

我可以上一门符合我习惯的 Java 外国类(class)吗 接口(interface)并将其“转换”到该接口(interface)?

示例:

public class YouCanNotChangeMe_IAmNotYours{
    public void doSomethingSpecial();
}

public interface MyInterface{
    void doSomethingSpecial();
}

我可以在需要接口(interface)的地方使用该外部类吗?

为什么我需要这个?

我想在运行时动态重新加载某些 JAR 的新版本, as I've mentioned here .

现在,服务器知道所有接口(interface)(知道以前的版本) 编译时的 JAR)。问题是,从加载类后 在运行时该 JAR 的较新版本,这些"new"类充当 如果他们不“知道”编译时已知的接口(interface)。

示例:一个名为 HelloClass 的旧类(在编译时已知)确实实现了 接口(interface)HelloInterface,但是新加载的HelloClass 实现相同的接口(interface)!

最佳答案

您可以扩展外部类(假设它是非最终类)并使该类实现该接口(interface)。

或者,您可以围绕该接口(interface)实现您自己的包装器:

public class ForeignClassWrapper implements MyInterface {
  private final YouCanNotChangeMe_IAmNotYours delegate;

  public ForeignClassWrapper(YouCanNotChangeMe_IAmNotYours delegate) {
    this.delegate = delegate;
  }

  public void doSomethingSpecial() {
    delegate.doSomethingSpecial();
  }
}

更一般地,您可以使用反射获得相同的效果(因此您不需要在包装类中硬编码 YouCanNotChangeMe_IAmNotYours)。

关于Java:使用符合我的接口(interface)的外部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/739715/

相关文章:

java - 拖放图像按钮消失在不同 View 后面

ios - 从另一个类中的函数获取返回值

java - 如何在 JavaFX Controller 中实现接口(interface)?

interface - 使用 Solidity : interface vs library? 的可升级智能合约

java - Apache 公共(public)链基本示例

java - Android gradle执行失败于:myapp:dexDebug

java - jsp中如何避免检查null

class - 使用 Angular2 在简单的类构造函数中注入(inject)服务

php - OOP——我应该开发多少类?

java - 如何用 Java 编写可靠的纯聚合(组合)游戏对象?