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)
我的问题是,我不知道我应该给的参数是什么类型first在bar。Java 中似乎没有联合类型。我该如何解决这个问题而不必编写三个几乎相同的版本bar?
该类型TypeA以TypeC不共享一个通用的接口,和我有过他们无法控制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;
}
Run Code Online (Sandbox Code Playgroud)
如果有更具体的 TypeA 等已知超类型,您显然可以使用它而不是Object作为参数。
这只有在所有三个版本都foo具有相同返回类型的情况下才有可能。
可悲的是,这个“解决方案”并不比编写三个重载版本的bar.
| 归档时间: |
|
| 查看次数: |
1709 次 |
| 最近记录: |