2016-12-04 58 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

相关问题