有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

接收并返回两种类型之一的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更改为getBBuildergtBBuilt(它们有很多,我不知道是否可以编写脚本)。有没有办法定义getB,如果aABuilder类型,它将返回BBuilder类型;如果aABuilt类型,它将返回BBuilder类型?在C++中,{^ }在^ {CD12}}中是很容易的,在{{CD15}}中,类型{^ },分别定义为^ {CD10}}和^ {CD13}}。然后定义getB如下:

template <class AType>
AType::BType getB(AType a) {return a.getB();}

共 (0) 个答案