流形和结构
Manifold and Structural
我不确定这是问这个问题的正确位置,但我正在对 manifold project 进行一些试验,我不确定我尝试实现的场景是否可以通过多种方式实现?
我有一个 class 如下所示(它将由我无法控制的第三方软件创建)..
public ClassA {
String getUuid();
}
现在我希望这个 class 实现以下接口...
@Structural
public Interface InterfaceA {
String getUuid();
}
对于以下场景...
public ClassB<GenTypeA extends InterfaceA> {
}
但是当我尝试以下操作时偏离了方向...
ClassB varB = new ClassB<ClassA>();
Java 开始抱怨 ClassA 没有实现 InterfaceA。
我正在尝试做的事情是否可行?
感谢解答...
这叫做Decorator pattern or Adapter pattern
// Immutable, cannot be changed
public final class ClassA {
String getUuid() {
return null;
}
}
public interface InterfaceA {
String getUuid();
}
public class ClassB implements InterfaceA {
private final ClassA delegate;
public ClassB(ClassA delegate) {
this.delegate = delegate;
}
@Override
public String getUuid() {
return delegate.getUuid();
}
}
您现在可以在 Manifold 中实现这一目标。有一个问题阻止了它的工作:https://github.com/manifold-systems/manifold/issues/35,最近已修复。在 0.38-alpha 版本中可用。
另一个重要说明。要完成您的示例,您还必须为 ClassA
提供扩展以声明它名义上支持 InterfaceA
,这只是为了避免强制转换涉及 InterfaceA
:[=16 的泛型类型=]
package my_project.extensions.path.to.ClassA;
import manifold.ext.api.Extension;
@Extension
public abstract class MyClassAExtension implements InterfaceA {
}
我不确定这是问这个问题的正确位置,但我正在对 manifold project 进行一些试验,我不确定我尝试实现的场景是否可以通过多种方式实现?
我有一个 class 如下所示(它将由我无法控制的第三方软件创建)..
public ClassA {
String getUuid();
}
现在我希望这个 class 实现以下接口...
@Structural
public Interface InterfaceA {
String getUuid();
}
对于以下场景...
public ClassB<GenTypeA extends InterfaceA> {
}
但是当我尝试以下操作时偏离了方向...
ClassB varB = new ClassB<ClassA>();
Java 开始抱怨 ClassA 没有实现 InterfaceA。
我正在尝试做的事情是否可行?
感谢解答...
这叫做Decorator pattern or Adapter pattern
// Immutable, cannot be changed
public final class ClassA {
String getUuid() {
return null;
}
}
public interface InterfaceA {
String getUuid();
}
public class ClassB implements InterfaceA {
private final ClassA delegate;
public ClassB(ClassA delegate) {
this.delegate = delegate;
}
@Override
public String getUuid() {
return delegate.getUuid();
}
}
您现在可以在 Manifold 中实现这一目标。有一个问题阻止了它的工作:https://github.com/manifold-systems/manifold/issues/35,最近已修复。在 0.38-alpha 版本中可用。
另一个重要说明。要完成您的示例,您还必须为 ClassA
提供扩展以声明它名义上支持 InterfaceA
,这只是为了避免强制转换涉及 InterfaceA
:[=16 的泛型类型=]
package my_project.extensions.path.to.ClassA;
import manifold.ext.api.Extension;
@Extension
public abstract class MyClassAExtension implements InterfaceA {
}