0

我想编写接受 aA 或 bB 类型参数的方法目前它已实现:

import a.A;
import b.B;

...
public void doSth(A arg) {
      SpecificClass.specificMethod(arg);
}

public void doSth(B arg) {
      SpecificClass.specificMethod(arg);
}

我想要一个通用方法“doSth”,它使用通配符并且只接受 aA 或 bB 重要信息 aA 和 bB 不是彼此的子类型。唯一常见的类型是 java.lang.Object。

有什么帮助吗?

4

3 回答 3

1

假设您可以这样做,如果 A 和 B 没有共同的超类,您将无法在参数上调用任何方法,但对象的方法除外。

所以我认为唯一的两个合理的解决方案是:

  • 有两种方法,一种用于 A,一种用于 B(您当前的设置)
  • 有一个将 Object 作为参数的方法,检查参数是否为 instanceof A 或 B,如果不是则抛出 IllegalArgumentException
于 2012-09-15T10:14:39.880 回答
1

您可以包装 A 和 B 扩展一个公共接口,就像:

interface CommonWrapper {
  public void doSth();
}

public class AWrapper implements CommonWrapper {
  private A wrapped;
  public AWrapper(A a) {
    this.wrapped = a;
  }

  public void doSth() {
    // implement the actual logic using a
  }
}

public class BWrapper implements CommonWrapper {
  private B wrapped;
  public BWrapper(B b) {
    this.wrapped = b;
  }

  public void doSth() {
    // implement the actual logic using b
  }
}

然后修改您的方法doSth以接受 CommonWrapper 对象作为参数:

public void doSth(CommonWrapper c) {
  c.doSth();
}
于 2012-09-15T10:29:49.387 回答
0
public <T> void doSth(T arg) {
      SpecificClass.specificMethod(arg);
}

将被称为:

yourClass.doSth(yourarg);

但它不限于任何可以扩展对象的东西,一切的意义何在。我建议让你的两个类都实现一个公共接口,然后对该接口进行编程。

于 2012-09-15T09:52:40.960 回答