![](/img/trans.png)
[英]How can we create more than one instance of a class from single Java class file?
[英]How to create a Proxy that can compose methods of more than one class?
我有实现接口I
A
类。 我有两个类B
和C
,每个类扩展A
并添加一个新方法。 B
类中的新方法不同于C
。 我需要创建一个代理服务器(某种组合),该代理服务器应具有A
所有方法以及B
和C
的新方法。
我尝试在CGLIB中使用Mixin $ Generator,但出现错误java.lang.ClassFormatError: Duplicate interface name in class file
。
有人可以提出解决方案吗?
用Java真正组成两个非接口类是不可能的。 如果这两个对象具有相同的结构(由A
),则将导致冲突,因为A
任何字段或方法都将是Java中非法字段的两倍。 但是,如果不存在此类冲突信息,则类别B
和C
不应共享超类A
如果要应用这种混合代理委托,则需要为类创建一些接口抽象。 然后可以将这些接口组合在一个代理中,并根据B
和C
实例中的哪个实现一个接口来委托给它们。 这是cglib的Mixin
提供的,仅此而已。 这是使用cglib进行合成的示例:
public interface Interface1 {
String first();
}
public interface Interface2 {
String second();
}
public class Class1 implements Interface1 {
@Override
public String first() {
return "first";
}
}
public class Class2 implements Interface2 {
@Override
public String second() {
return "second";
}
}
public interface MixinInterface extends Interface1, Interface2 { /* empty */ }
@Test
public void testMixin() throws Exception {
Mixin mixin = Mixin.create(new Class[]{Interface1.class, Interface2.class,
MixinInterface.class}, new Object[]{new Class1(), new Class2()});
MixinInterface mixinDelegate = (MixinInterface) mixin;
assertEquals("first", mixinDelegate.first());
assertEquals("second", mixinDelegate.second());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.