如何在 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);
我有一个 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);