gpt4 book ai didi

java - 是否有任何标准方法可以将对象转换为不同的对象?

转载 作者:行者123 更新时间:2023-11-30 03:09:09 26 4
gpt4 key购买 nike

我遇到了一个特殊情况,我已经实现了构建器模式。其中一个变量的类型为ExternalClassA,而传递给构建器的参数的类型为InternalClassA。目前我使用了如下方法:

Class Parent {
String variableX;
int variableY;
ExternalZ variableZ;
public static builder {
....
ExternalZ varz;
/* .. builder logic */
private builder withExternalZ(InternalZ internalZ) { //This is the transform method I'm using currently
this.variableZ.getSomeObject().setX(this.internalZ.getSomeObject().getX()); //Similar kind of lines making my transform method look ugly
}
}

有什么方法可以让我的 withExternalZ 方法看起来更简单吗?目前我正在考虑实现 Mapper 模式或 Java8 函数(如 http://www.leveluplunch.com/java/tutorials/016-transform-object-class-into-another-type-java8/ 中所述)。 Mapper 似乎不是一个好的选择,因为我只需要一种方式转换。

如果有人有更好、更简单的方法,请分享。

最佳答案

当前您正在将一个 InternalZ 实例传递给 withExternalZ() 方法,该方法实际上需要\期望一个ExternalZ 对象。但是您手头有一个InternalZ 方法。

适配器模式是为此类场景而构建的,因为它将目标接口(interface)(InternalZ)调整/转换为客户端期望的接口(interface)(ExternalZ)。简而言之,您需要编写一个从InternalZ 对象转换为ExternalZ 对象的适配器。适配器类代码大致如下 -

public class IntToExtZAdapter extends ExternalZ{
InternalZ internalZ=null;
public IntToExtZAdapter(InternalZ internalZ){
this.internalZ=internalZ;
}
public X getX(){
//Logic for getting X from internalZ object in adapter
}
public setX(X x){
//Logic for setting X in internalZ object in adapter
}
//...and so on
}

然后不要这样做 -

private builder withExternalZ(InternalZ internalZ) { //This is the transform method I'm using currently
this.variableZ.getSomeObject().setX(this.internalZ.getSomeObject().getX()); //Similar kind of lines making my transform method look ugly
}

你现在要做的是 -

this.variableZ=new IntToExtZAdapter (internalZ);

现在您可以按原样使用variableZ,并且内部IntToExtZAdapter将在InternalZ和ExternalZ之间进行调整/转换。

从InternalZ到ExternalZ来回转换的所有“丑陋”逻辑现在都“隐藏”在适配器内部。

关于java - 是否有任何标准方法可以将对象转换为不同的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34005196/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com