2016-01-27 26 views
-5

我正在處理類集合,其中我有一個集合,它將被過濾掉。例如,過濾器類是一個接口,它是一個接受T元素的方法(匹配)。集合中的重寫方法<T>

在我FilterCollection類:

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); 
} 

從那裏我必須重寫一些方法,比如加,中的addAll包含,刪除等

隨着add()方法

@Override 
public boolean add(T object) 
{ 
    return filterCollection.add(object); 
} 

但是,我需要看看對象是否與過濾器中的內容匹配,如果是,請不要添加它,如果它沒有添加它。有關這方面的正確方法是什麼?

+0

'Filter'定義在哪裏?在一些圖書館,或者你創建的東西?無論如何,它看起來像在'add'方法中有'if'語句來根據過濾器中定義的某些行爲來有條件添加。 – guitarsteve

+0

該過濾器是一個接口。布爾匹配(T元素);這是唯一的過濾器。它是一個單獨的課程。 – AndroidDevNoob

回答

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 
    } 
} 
+0

這不會工作我不需要添加任何方法到Filter.java接口。如果布爾添加在FilteredCollection.java類中,那麼它不會匹配匹配項。 – AndroidDevNoob

+0

@AndroidDevNoob你不必添加任何東西到'Filter.java'。然而,由於'Filter'是一個'interface'而不是'class',所以你必須給它一個實現:創建一個**實現Filter的新類**。然後,在你的'FilteredCollection'類的'add()'方法**中,你可以檢查你想添加的對象是否與過濾器匹配。 – timtim17

+0

@ timtim17,你怎麼知道操作系統還沒有使用過濾器的實現?如果已經使用了有效的實施方案,告訴他/她需要實施過濾器可能會引起誤解。當操作初始化FilteredCollection時,他必須已經通過Filter。如果它是一個實例,那麼該操作已經在使用一個實現。 –

1

您需要檢查是否currentFilter.matches的對象。如果是這樣,然後添加它。如果您成功添加了該對象,請返回true。否則返回false

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