如何在 Java 中创建链式方法

How to create chained methods in Java

我有一个 class 负责控制在运行时创建的对象——它从摆动框架的输入构建它们——就像一个 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);
        }
    }
}

不是调用此方法并传递引用 class 和索引,我希望方法调用是这样的:dao.removeFrom(MyObject.class).at(myIndex); 猜猜它看起来像 Stream API 使用。很高兴有人能帮助我!

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

当您的 modelsMap 没有给定 clazz 的条目时,您还需要考虑极端情况。

请检查 Builder 设计模式。尝试为具有少量属性和 getter 和 setter 的简单对象创建构建器设计模式。

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

您可以引入一个 DaoRemover class,您可以通过工厂方法实例化它,实例方法 return 当前实例。

例如:

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);