Java:泛型中的不同接口

Vla*_*lad 1 java generics

我有两个类(A和B)具有相同的方法(foo):

public class A {
 public String foo() {
  return "A said foo";
 }
}

public class B {
 public String foo() {
  return "B said foo";
 }
}
Run Code Online (Sandbox Code Playgroud)

我想创建可以调用此方法的泛型类.但是我有两个想法如何在运行时执行此操作并且没有关于编译时间的想法:

  1. 检查类型并转换为A或B.

  2. 获取方法.

我调用getMethod的泛型示例:

public class Template<T> {
 private T mT;

 public Template(T t) {
  mT = t;
 }

    public String bar() {
     String result = "no result";
  try {
      Method m = mT.getClass().getMethod("foo", null);
   result = (String)m.invoke(mT);
  } catch (Exception e) {
   result = e.toString();
   e.printStackTrace();
  }
  return result;
    }
}
Run Code Online (Sandbox Code Playgroud)

还有另外一种方法吗?我正在寻找这样的东西:

public class Template<T extends A | B> {
...
}
Run Code Online (Sandbox Code Playgroud)

请注意,我不是"A"和"B"类的创建者.

Mir*_*uta 5

你必须让这两个类实现一个声明foo方法的通用接口.Java不支持所谓的"duck typing",这在这里会有所帮助.