我怎样才能更好地抽象?

德本尼

给定具有两个相似方法的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);
    }
  }
乔普·艾根(Joop Eggen)
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可能会有更好的解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我怎样才能更好地重写以下Java代码?

Ruby - 我怎样才能更好地写这行?

我怎样才能更好地使用 purrr 在 R 中重构以下代码

我怎样才能让它更好地使用这个 json 检查器功能?PYTHON

我怎样才能更好地转换我的代码

我怎样才能使这个gsub更好?

VBA 脚本,我怎样才能更好地编写此代码?运行时错误 13,类型不匹配

我怎样才能更优雅地进行_.has检查?

我怎样才能最好地实现这个 React Transition?

我怎样才能真正地执行这个?

我怎样才能清楚地猜猜游戏?

我怎样才能完美地翻转那个图像?

我怎样才能“clipToBottomBounds”?

我怎样才能让我的敌人子弹攻击得更好?

我怎样才能有一个接受“我的类型”类型参数的抽象方法?

我怎样才能使这个 Ribble 效果更好?统一

React:我怎样才能让这个 React 组件写得更好以提高效率?

我怎样才能使这个代码更好?因为它现在不起作用

我怎样才能使这个地图过滤器更短更好

我怎样才能加快我的代码?

我的间谍功能没有被调用 - 我怎样才能正确地监视这个功能?

我怎样才能最好地旋转我的红移表?

我怎样才能更均匀地调整我的导航栏,我怎样才能减少一些代码?(感谢您的格式帮助)

我怎样才能使BufferedImage“ fainter”?

我怎样才能打保龄球?

我怎样才能返回多行计数

我怎样才能兑现自己的诺言?

我怎样才能倒计时

我怎样才能让cardview消失?