Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中创建链式方法_Java_Fluent - Fatal编程技术网

如何在Java中创建链式方法

如何在Java中创建链式方法,java,fluent,Java,Fluent,我有一个类负责控制运行时创建的对象——它从swing框架的输入构建对象——就像DAO一样。它具有删除已创建对象的方法: public void removeFrom(Class<?> clazz, int index) { for (Map.Entry<String, Object> entry : modelsMap.entrySet()) { if (entry.getKey().equals(clazz.getSimpleName())) {

我有一个类负责控制运行时创建的对象——它从swing框架的输入构建对象——就像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);
        }
    }
}
public void removeFrom(类clazz,int索引){
对于(Map.Entry:modelsMap.entrySet()){
if(entry.getKey().equals(clazz.getSimpleName())){
((ArrayList)entry.getValue()).remove(index);
}
}
}

我希望方法调用如下:
dao.removefom(MyObject.class).at(myIndex)猜测它看起来像流API使用的链式方法。如果有人能帮助我,我很高兴

在这种情况下,您的
removeFrom()
方法应该返回
((ArrayList)entry.getValue())
。这个包装器必须有一个方法
at(int-index)
,它删除给定索引的元素


您还需要考虑当您的
modelsMap
没有给定
clazz
的条目时的特殊情况。在这种情况下,
removeFrom()
方法应该返回
((ArrayList)entry.getValue())
。这个包装器必须有一个方法
at(int-index)
,它删除给定索引的元素


您还需要考虑当您的
modelsMap
没有给定
clazz

的条目时的情况。请检查生成器设计模式。尝试为一个简单对象创建生成器设计模式,该对象几乎没有属性、getter和setter


一旦您能够做到这一点,方法链接将看起来非常清晰。:)

请检查生成器设计模式。尝试为一个简单对象创建生成器设计模式,该对象几乎没有属性、getter和setter


一旦您能够做到这一点,方法链接将看起来非常清晰。:)

您可以引入一个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类,该类可以由工厂方法实例化,实例方法返回当前实例

例如:

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

}


是的,我甚至考虑过使用类似于构建器模式的东西,但是这个方法应该是空的,也就是说,不必创建任何对象。是的,我甚至考虑过使用类似于构建器模式的东西,但是这个方法应该是空的,也就是说,不必使用包装器创建任何对象。你是说一个“保存它”的类,不是吗?@AndréSpironello,是的,将列表存储为内部属性的类。使用wrapper,您指的是“保存列表”的类,不是吗?@AndréSpironello,是的,将列表存储为内部属性的类。
DaoRemover.of(MyObject.class)
          .at(myIndex) 
          .at(myOtherIndex);