3 回答
TA贡献1799条经验 获得超9个赞
你可以做类似的事情
<T> Set<String> trimNumberList(Set<String> criteria, Function<String, T> valueOf, Predicate<T> isWellFormed){
Set<String> validData = new HashSet<>();
Set<T> numberList = criteria.stream().map(String::trim).map(valueOf)
.filter(isWellFormed).collect(Collectors.toSet());
for (T num : numberList) {
// Do somehing with validData
}
return validData;
}
然后像这样称呼它
trimNumberList(criteria, Class1Number::valueOf, Class1Number::isWellFormed);
trimNumberList(criteria, Class2Number::valueOf, Class2Number::isWellFormed);
但是,在 for 循环中对您的实例执行任何特殊操作都需要一个通用的基本类型。
TA贡献1884条经验 获得超4个赞
您可以为 Class1Number、Class2Number、Class3Number 创建一个通用抽象超类或通用接口,并在您的方法中使用它而不是真正的子类。
TA贡献1799条经验 获得超8个赞
您的班级似乎具有相同的行为。
如果您在它们上使用的方法也相同,我的建议是使用 Java 继承,如下所述
class Super {
.....
.....
}
class Sub extends Super {
.....
.....
}
在你的情况下
class Class0Number {
theMethodYouUse(){
.....
};
}
class Class1Number extends Class0Number {
// and maybe for different behaviour inside the for each block you can override the method and use always the same by overriding it
@Override
theMehodYouUse(){
......
};
}
添加回答
举报