如何在Java中创建链式方法
我有一个类负责控制运行时创建的对象——它从swing框架的输入构建对象——就像DAO一样。它具有删除已创建对象的方法:如何在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())) {
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);