2016-12-04 6 views
-2

通常、ジェネリックを実装する場合、一般化したいタイプのTがあります。 HashSet<T>を一般化したクラスを作成したいと思います。java generics - 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 'を参照してください。つまり、「Helper 」があなたのためにうまくいかない理由がありますか? – Ryan

+0

また、クラス名を「ヘルパー」にしないことを願っています。 –

+0

これは可能ですが、実装したいものによって異なりますが、他のオプションもあります – emotionlessbananas

答えて

1

方法を持っていなければならないことを意味しており、Iterable<HashSet<T>>を実装しますHashSetまたはHashSetのサブタイプにする

+1

ありがとうGerardo :) – Mike

1

は単に

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

あなたのクラスは一般的なものです。あなたはそのジェネリック型Tに名前を選択し、それはあなたがイースリージェネリック型「力」に順番に

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

を行うことができます

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

D-oh!もちろん。ありがとうたくさん:) – Mike

関連する問題