我正在使用一个带有方法 foo
的库,签名如下:
TypeR foo(TypeA first, int second)
TypeR foo(TypeB first, int second)
TypeR foo(TypeC first, int second)
我正在编写自己的方法 bar
调用 foo
,我想直接将第一个参数传递给 foo
:
bar(??? first, int baz) {
int second = someCalculation(baz);
return foo(first, second);
}
我的问题是我不知道应该给 bar
中的参数 first
什么类型。 Java 中似乎没有联合类型。我怎样才能解决这个问题而不必编写三个几乎相同的 bar
版本?
TypeA
到 TypeC
类型不共享公共(public)接口(interface),我无法控制它们或 foo
,因为它们在一个外部图书馆。我所能控制的就是如何实现 bar
。
最佳答案
我能想到的最接近的是这样的(删除与 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;
}
如果有更具体的已知父类(super class)型 TypeA 等,您显然可以使用它而不是 Object
作为参数。
这只有在 foo
的所有三个版本都具有相同的返回类型时才有可能。
遗憾的是,这个“解决方案”并没有比编写三个重载版本的 bar
更好,甚至可能更糟。
关于java - 将可能是多种类型的参数传递给 Java 中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53400523/