不同类型的方法参数

时间:2012-09-15 09:51:25

标签: java wildcard java-6

我想编写接受a.A或b.B类型参数的方法。 目前已实施:

import a.A;
import b.B;

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

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

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

任何帮助?

3 个答案:

答案 0 :(得分:1)

假设你可以这样做,如果A和B没有共同的超类,你将无法调用参数上的任何方法,而是调用Object的方法。

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

  • 有两种方法,一种用于A,一种用于B(当前设置)
  • 有一个方法将Object作为参数,检查参数是A或B的实例,如果没有抛出IllegalArgumentException

答案 1 :(得分: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();
}

答案 2 :(得分:0)

public <T> void doSth(T arg) {
      SpecificClass.specificMethod(arg);
}

将被称为:

yourClass.doSth(yourarg);

但是它不限制任何可以扩展对象的东西,什么都重要。我建议让你的两个类实现一个公共接口,然后编程到该接口。