接受包含特定方法的对象,而不是接受特定类型

Tit*_*lum 0 java generics polymorphism dynamic-typing

[编辑]:这个问题与我无法控制的类型有关。因此,使它们无法继承超类或实现接口是不可能的。我希望能够做到这一点而无需包装类型。

我想编写一个方法,将包含特定方法的所有对象接受为参数。

例如,我们有2种完全不同的类型,它们都包含get具有相同签名的方法:

public class TypeOne {
  public int get() { /* Some implementation */ }
}

public class TypeTwo {
  public int get() { /* Some other implementation */ }
}
Run Code Online (Sandbox Code Playgroud)

如何编写可以接受这两种类型的方法?

public static int callGetOnObject(GettableObject gettableObject) {
  return gettableObject.get();
}
Run Code Online (Sandbox Code Playgroud)

alf*_*sin 6

首先使方法成为非静态方法,其次使两个类都实现具有该get方法的接口。最后,更改callGetOnObject为接受实现该接口的类的实例:

public interface Getter {
  int get();
}

public class TypeOne implements Getter {
  public int get() { /* Some implementation */ }
}

public class TypeTwo implements Getter {
  public int get() { /* Some other implementation */ }
}
Run Code Online (Sandbox Code Playgroud)

然后:

public static int callGetOnObject(Getter gettableObject) {
  return gettableObject.get();
}
Run Code Online (Sandbox Code Playgroud)

编辑:

由于问题已被修改,因此这是新的答案:如果您不控制此代码并且不愿意包装它,那么您就不走运了:没办法做到这一点。