我可以上一门符合我习惯的 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/