gpt4 book ai didi

java - 我怎样才能更好地抽象?

转载 作者:行者123 更新时间:2023-12-04 08:38:50 25 4
gpt4 key购买 nike

给定一个具有两个相似方法的 util 类,这些方法仅在 setter/getter 字段上有所不同:

public static void method_A(Dbo dbo) {
if (dbo instanceof Zdbo) {
((Zdbo)dbo)
.getSome()
.forEach(z -> z.setFieldX(dbo.getFieldX()));
}
}

public static void method_B(Dbo dbo) {
if (dbo instanceof Zdbo) {
((Zdbo)dbo)
.getSome()
.forEach(z -> z.setFieldZ(dbo.getFieldZ()));
}
}
我的问题是:我怎样才能摆脱重复的代码?
我的方法是实现这样的目标:
private static void xxx(Dbo dbo, Consumer c) {
if (dbo instanceof Zdbo) {
((Zdbo)dbo).getSome().forEach(c);
}
}

最佳答案

public static Stream<Zdbo> getSome(Dbo dbo) {
return dbo instanceof Zdbo ? ((Zdbo)dbo).getSome() : Stream.empty();
}

public static Optional<Zdbo> asZdbo(Dbo dbo) {
return dbo instanceof Zdbo ? Optional.of((Zdbo)dbo) : Optional.empty();
}

public static void method_A(Dbo dbo) {
getSome(dbo).forEach(z -> z.setFieldX(dbo.getFieldX()));
}

public static void method_B(Dbo dbo) {
getSome(dbo).forEach(z -> z.setFieldZ(dbo.getFieldZ()));
}
我会将它保留在 Stream 或 Optional 级别。上面的method_A和method_B可以简单地替换为它们的内容,不需要传递setter和getter。
而且它更通用,并且不会产生代码开销。
请注意,例如 instanceof+cast 下一个 java 可能有更好的解决方案。

关于java - 我怎样才能更好地抽象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64660708/

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