繁体   English   中英

如何创建可以组成一个以上类的方法的代理?

[英]How to create a Proxy that can compose methods of more than one class?

我有实现接口I A类。 我有两个类BC ,每个类扩展A并添加一个新方法。 B类中的新方法不同于C 我需要创建一个代理服务器(某种组合),该代理服务器应具有A所有方法以及BC的新方法。

我尝试在CGLIB中使用Mixin $ Generator,但出现错误java.lang.ClassFormatError: Duplicate interface name in class file

有人可以提出解决方案吗?

用Java真正组成两个非接口类是不可能的。 如果这两个对象具有相同的结构(由A ),则将导致冲突,因为A任何字段或方法都将是Java中非法字段的两倍。 但是,如果不存在此类冲突信息,则类别BC不应共享超类A

如果要应用这种混合代理委托,则需要为类创建一些接口抽象。 然后可以将这些接口组合在一个代理中,并根据BC实例中的哪个实现一个接口来委托给它们。 这是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM