gpt4 book ai didi

java - 创建一个重用同一接口(interface)的其他实现的对象的实现类

转载 作者:行者123 更新时间:2023-11-30 04:01:27 25 4
gpt4 key购买 nike

我想创建一个类,它不实现接口(interface)的任何方法,但用它自己的方法扩展 A 的任何实现。

假设我们有以下内容:

public interface A {
public void a();
}

public class B implements A {
@override
public void a() {
System.out.println("a");
}
}

我现在想要创建一个类 C,它也实现 A 并采用 A 的另一个随机实现:

 public class C implements A {
public C(A a) {
//what do I need to do with a here?
}
public void c() {
System.out.println("c");
}
}

现在,如果我有以下内容:

A b = new B();
A c = new C(b);
c.a();

输出应该是“a”。

我不能这样

public class C extends B {
...

因为 C 应该能够与 A 的任何实现一起工作,而不仅仅是 B。

我也做不到

  public class C implements A {
private a;
public C(A a) {
this.a = a;
}
@override
public void a() {
a.a();
}
public void c() {
System.out.println("c");
}
}

因为这意味着我必须重定向每个接口(interface)方法并在 A 发生变化时重写 C。

Java中有没有办法解决这个问题?

再例如,替换A:List; B:数组列表; C:FooList; a(): 大小()

最佳答案

您正在寻找的是一个动态代理,它通过委托(delegate)给该接口(interface)的具体实现来自动实现该接口(interface)的所有方法。使用 Java 的 Proxy 做到这一点并不简单,但也不是那么复杂。类。

这种代理的具体示例,通过包装它来“添加”方法到PreparedStatement的任何实例,可以在 https://github.com/Ninja-Squad/ninja-core/blob/master/src/main/java/com/ninja_squad/core/jdbc/PreparedStatements.java 找到。

关于java - 创建一个重用同一接口(interface)的其他实现的对象的实现类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21906801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com