覆盖Collection <t>中的方法

时间:2016-01-27 02:24:54

标签: java generics

我正在进行一项课程作业,我有一个集合,它将被过滤掉。例如,作为接口的过滤器类是一个接收T元素的方法(匹配)。

在我的FilterCollection类中:

sudo ./nexus run

从那里我必须覆盖方法,例如add,addall,contains,remove等。

使用add()方法

public class FilteredCollection<T> extends AbstractCollectionDecorator<T> {

Collection<T> filterCollection;
Filter<T> currentFilter;


private FilteredCollection(Collection<T> coll, Filter<T> filter) {
    super(coll);
    this.filterCollection = coll;
    this.currentFilter = filter;
}


public static <T> FilteredCollection<T> decorate(Collection<T> coll, Filter<T> filter) {
    return new FilteredCollection<T>(coll, filter);
}

但是,我需要查看对象是否与过滤器中的内容匹配,如果匹配,请不要添加它,如果没有,请添加它。什么是正确的方法?

2 个答案:

答案 0 :(得分:1)

您需要检查对象是否为currentFilter.matches。如果是,则添加它。如果您成功添加了对象,请返回true。否则返回false

@Override
public boolean add(T object)
{
    if (currentFilter.matches(object)) {
        return filterCollection.add(object);
    }
    return false;
}

答案 1 :(得分:0)

由于Filter是一个接口,因此您需要为其提供一个实现。例如:

public class MyFilter<T> implements Filter<T> {
    boolean matches(T element) {
        if (something) {
            return true;
        } else {
            return false;
        }
    }
}

然后在您的FilteredCollection.add()方法中,您可以执行以下操作:

@Override
public boolean add(T object) {
    if (currentFilter.matches(object)) {
        // it matches: add it
    } else {
        // it doesn't match: do something else
    }
}