将可能是多种类型的参数传递给 Java 中的方法?

And*_*ers 2 java methods types

我正在使用一个foo带有如下签名的方法的库:

TypeR foo(TypeA first, int second)
TypeR foo(TypeB first, int second)
TypeR foo(TypeC first, int second)
Run Code Online (Sandbox Code Playgroud)

我正在编写自己的方法bar调用foo,我想直接将第一个参数传递给foo

bar(??? first, int baz) {
    int second = someCalculation(baz);
    return foo(first, second);
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,我不知道我应该给的参数是什么类型firstbar。Java 中似乎没有联合类型。我该如何解决这个问题而不必编写三个几乎相同的版本bar

该类型TypeATypeC不共享一个通用的接口,和我有过他们无法控制foo,因为它们是在外部库。我所能控制的就是我如何实施bar.

Dav*_*sta 5

我能想到的最接近的是这样的东西(删除与之相关的东西,second因为它与要点无关)。

TypeR bar(Object first) {
  TypeR retvalue;
  if (first instanceof TypeA)
    retvalue = foo( (TypeA)first );
  else if (first instanceof TypeB)
    retvalue = foo( (TypeB)first );
  else if (first instanceof TypeC)
    retvalue = foo( (TypeC)first );
  return retvalue;
}
Run Code Online (Sandbox Code Playgroud)

如果有更具体的 TypeA 等已知超类型,您显然可以使用它而不是Object作为参数。

这只有在所有三个版本都foo具有相同返回类型的情况下才有可能。

可悲的是,这个“解决方案”并不比编写三个重载版本的bar.