0

假设我们有 2 个类 A,B:

class A extends SomeClass {
   public String getProp() {
      return "propA";
   }
}

class B extends SomeOtherClass{
   private String propB;

   public B setProp(String value) {
      propB = value;
      return this;
   }

   public String getProp() {
      return propB;
   }
}

并假设我们有另一个名为 X 的类,而这个类 X 有一个方法 someMethod 可以引用这些类中的任何一个,有没有一种方法可以在这个方法中使用泛型根据具有的对象调用 getProp()被通过了?

4

4 回答 4

2

不使用泛型。

您可以为这些具有 getProp() 方法的类定义一个公共接口。使用它的方法应该接受接口的一个实例,并且可以调用getProp()接口上的方法,这将由你传入的具体类实现。

于 2012-09-30T16:44:11.507 回答
0

泛型用于编译时的类型安全,而不是在运行时实现多态性。所以我不认为你问的是可能的。

在您的场景中,您应该考虑创建一个接口。像这样的东西:

public interface PropInf{
  String getProp();
}

然后你必须在你的两个类中实现这个接口。使用这个接口的引用变量,就可以实现多态。

于 2012-09-30T16:43:43.213 回答
0

定义interface如下:

interface StringPropProvider {
  String getProp();
}

然后定义你的类来实现该接口:

class A extends SomeClass implements StringPropProvider {
   public String getProp() {
    return "propA";
}

class B extends SomeOtherClass implements StringPropProvider {
  private String propB;

  public B setProp(String value) {
    propB = value;
    return this;
  }

  public String getProp() {
    return propB;
  }
}
于 2012-09-30T16:46:38.643 回答
0

那么这可以被认为是一个答案,但我不喜欢它..

public class X<T>{
public void someMethod(T t) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
    t.getClass().getMethod("getProp", null).invoke(t, null);
}
public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
    X<A> weird = new X<>();
    A a = new A();
    weird.someMethod(a);
}

}

于 2012-10-01T03:27:53.193 回答