2016-12-04 31 views
-2

通常當你實現一個通用的,你有一些你想要推廣的類型T。我想寫一個概括HashSet<T>的類。java泛型 - 如何實現一個需要HashSet的類<T>?

我想這寫下面的方式,但它不是正確的語法或也許它不支持:

public class PermutationHelper<T> implements Iterable<T> { 

    private HashSet<T> m_set; 
    private long numberOfPermutations; 
    private boolean includeEmptyPermutationAsOutput = false; 

    public PermutationHelper(HashSet<T> set) { 
     m_set = set; 
     numberOfPermutations = 2^set.size(); 
    } 

    public void setIncludeEmptyPermutationAsOutput(boolean value) { 
     includeEmptyPermutationAsOutput = value; 
    } 

    @Override 
    public Iterator<T> iterator() { 
     Iterator<T> it = new Iterator<T>() { 

      long currentIndex = (includeEmptyPermutationAsOutput ? 0 : 1); 

      @Override 
      public boolean hasNext() { 
       return currentIndex < numberOfPermutations; 
      } 

      @Override 
      public T next() { 
       HashSet<T> result = new HashSet<T>(); 
       return result; // expects T, but is a HashSet<T>.. 
      } 

      @Override 
      public void remove() { 
       throw new UnsupportedOperationException(); 
      } 
     }; 
     return it; 
    } 
} 

我想迭代器給我傳入的HashSet<T>的所有子集。

+0

只要使用'T'作爲參數並在適當時參考'HashSet '?即是否有某種理由'助手'不適合你? – Ryan

+0

另外我希望你不打算命名你的班'助手'。 –

+0

這是可能的,但取決於你想要實現的,還有其他選項 – emotionlessbananas

回答

1

你可以伊斯利做

public class PermutationHelper<T extends HashSet<T>> implements Iterable<T>

,以「力」的泛型類型成爲HashSet或HashSet的子類型

+1

謝謝傑拉爾多:) – Mike

1

你想要的是簡單

public class PermutationHelper<T> implements Iterable<HashSet<T>> 

你的類是通用的。你選擇它的命名泛型類型T.而且它實現Iterable<HashSet<T>>,這意味着它必須有一個方法

public Iterator<HashSet<T>> iterator() 
+0

D-哦!當然。非常感謝:) – Mike

相關問題