我只有一个界面
public interface ItemFilter{
public List<Item> filter (List<Item> items, List<Obj1> obj1List, List<Obj2> obj2List)
}
有三种实现方式。
public Class Filter1 implements ItemFilter {
public List<Item> filter (List<Item> items, List<Obj1> obj1List, List<Obj2> obj2List) {
// Some logic like
if (obj1List != null) {
return items;
}
}
}
public Class Filter2 implements ItemFilter {
public List<Item> filter (List<Item> items, List<Obj1> obj1List, List<Obj2> obj2List) {
// Some logic like
if (obj2List != null) {
return items;
}
}
public Class Filter3 implements ItemFilter {
public List<Item> filter (List<Item> items, List<Obj1> obj1List, List<Obj2> obj2List) {
// Some logic like
if (obj1List.size() !=0 && obj2List.size() !=0 ) {
return items;
}
}
}
Filter1
正在使用 obj1List
过滤items
和Filter2
正在使用 obj2List
过滤items
和Filter3
正在使用 obj1List
和obj2List
过滤items
。
我想要一个filterChain
这将迭代循环中的所有过滤器。
public Class FilterChain implements ItemFilter {
// Injected the Filter1, Filter2, Filter3 from guice multibinder
@Inject
private Set<ItemFilter> itemFilters;
public List<Item> filter (List<Item> items, List<Obj1> obj1List, List<Obj2> obj2List) {
List<Item> resultItems = items;
for(ItemFilter itemFilter : itemFilters) {
resultItems = itemFilter.filter(resultItems, obj1List, obj2List);
}
return resultItems;
}
}
这里类(class)Filter1
过滤器方法实现将具有额外的 obj2List
作为变量。接口(interface)声明中可以有一个实现中未使用的变量吗?
主要思想是,拥有不同的过滤器可以轻松解耦不同类中的过滤逻辑。不同的过滤器使用不同的参数来过滤 List<Item>
.
最佳答案
是的,某些方法实现忽略某些方法参数是绝对可以的。
当然,在这种情况下你应该考虑所有参数的作用,也许你的代码可以重构以使用更少的参数。但是,如果您没有看到良好的重构,请继续使用部分忽略的参数。
关于java - 不使用方法参数的接口(interface)实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47780614/