接收并返回两种类型之一的java函数
<>我将C++代码移植到java中,遇到了以下问题。 我有四个类(在转到Java之后):ABuilt, ABuilder, BBuilt, BBuilder
class ABuilt implements A {
private BBuilt b;
public A(BBuilt b) {this.b = b;}
@Override
public BBuilt getB() {return b;}
}
class ABuilder implements A, Builder<ABuilt> {
private BBuilder b;
@Override
public getB() {return b;}
public setB(BBuilder b) {this.b = b;}
@Override
public ABuilt build() {return new ABuilt(b.build();}
}
class BBuilt implements B {
int data;
public BBuilt(int data) {this.data = data;}
@Override
int getData() {return data;}
}
class BBuilder implements B, Builder<BBuilt> {
int data;
@Override
public BBuilt build() {return new BBuilt(data);}
public BBuilder(int data) {this.data = data;}
@Override
int getData() {return data;}
void setData(int data) {this.data = data;}
}
我有一个函数,它获取一个A
并返回它的B
。这很简单:
B getB(A a) {return a.getB();} // This works fine.
问题在于以下情况:
void setData(ABuilder a, int data) {
BBuilder b = (BBuilder) getB(a);
b.setData(data);
}
我想避开演员阵容。我可以通过编写两个函数来解决这个问题。这并不好,因为我要么在两个函数中重复代码,要么不必要地构建a
,还因为我必须将代码库中的所有用法从getB
更改为getBBuilder
或gtBBuilt
(它们有很多,我不知道是否可以编写脚本)。有没有办法定义getB
,如果a
是ABuilder
类型,它将返回BBuilder
类型;如果a
是ABuilt
类型,它将返回BBuilder
类型?在C++中,{^ getB
如下:
template <class AType>
AType::BType getB(AType a) {return a.getB();}
共 (0) 个答案