为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Java 中创建链式方法

如何在 Java 中创建链式方法

幕布斯7119047 2021-12-30 20:44:59
我有一个类负责控制在运行时创建的对象——它根据摆动框架的输入构建它们——就像一个 DAO。它具有删除已创建对象的方法:public void removeFrom(Class<?> clazz, int index) {    for (Map.Entry<String, Object> entry : modelsMap.entrySet()) {        if (entry.getKey().equals(clazz.getSimpleName())) {            ((ArrayList<Object>) entry.getValue()).remove(index);        }    }}我不希望调用此方法并传递所指类和索引,而是希望方法调用是这样的:dao.removeFrom(MyObject.class).at(myIndex);猜猜它看起来像 Stream API 使用的链式方法。很高兴有人能帮助我!
查看完整描述

3 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

在这种情况下,您的removeFrom()方法应该返回围绕((ArrayList<Object>) entry.getValue()). 并且该包装器必须具有at(int index)删除给定索引的元素的方法。

并且您还需要考虑当您modelsMap没有给定clazz.


查看完整回答
反对 回复 2021-12-30
?
千巷猫影

TA贡献1829条经验 获得超7个赞

请检查 Builder 设计模式。尝试为一个简单的对象创建构建器设计模式,该对象几乎没有属性以及 getter 和 setter。

一旦你能够做到这一点,方法链就会看起来非常清晰。:)


查看完整回答
反对 回复 2021-12-30
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

您可以引入一个 DaoRemover 类,您可以通过工厂方法实例化该类,并且实例方法返回当前实例。


例如 :


public class DaoRemover {

    private Map<String, Object> modelsMap; // your actual data

    private final List<ArrayList<Object>> list; // list of list after filtering on the class



    public static DaoRemover of(Class<?> clazz) {

        return new DaoRemover(clazz);

    }


    private DaoRemover(Class<?> clazz) {

        list = modelsMap.entrySet()

                        .stream()

                        .filter(e -> e.getKey()

                                      .equals(clazz.getSimpleName()))

                        .map(e -> (ArrayList<Object>) e.getValue())

                        .collect(toList());

    }


    public DaoRemover at(int index) {

        list.forEach(l -> l.remove(index));

        return this;

    }


}

你现在可以这样做:


DaoRemover.of(MyObject.class)

          .at(myIndex); 

或者


DaoRemover.of(MyObject.class)

          .at(myIndex) 

          .at(myOtherIndex); 


查看完整回答
反对 回复 2021-12-30
  • 3 回答
  • 0 关注
  • 208 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信