2017-07-10 11 views
-1

EnumSetを取り込み、Enumオブジェクトをセットに追加して、新しい変更されたEnumSetを出力するメソッドを作成したいとします。私はこのメソッドの署名を書く方法があまりよく分かりません。ブラウジングのビットの後、私は私の署名として、次のいる:署名の一般的なEnumSet

public <E extends Enum<E>> EnumSet<E> addIntervals(EnumSet<E> set) 

をしかし、私は私の方法で設定された基準とき、私はそのEnumSetのに関連付けられているメソッドを使用することはできません。私はこれに正しく近づいていますか?

enum Week { 
    SUN(0), MON(1), TUE(2), WED(3), THU(4), FRI(5), SAT(6)} 

ここは私の列挙セットです。たとえば、空のEnumSetに奇妙な曜日を追加したいとします。

public <E extends Enum<E>> EnumSet<E> addIntervals(EnumSet<E> set) { 
    ... 
    for (Week day : oddWeekDays) { 
      set.add(day); 

セットはタイプEnumSetのを持っていなければならない、と私はWeek.MONまたはWeek.WEDのような週の奇数日を追加することができるはずです。ただし、IntelliJでは、「メソッド 'add'を解決できません」と表示されます。

おかげ

EDIT:

enum Month{ 
     DAY_1(0), DAY_2(1) ... DAY_31(30)} 

は、私は一般的にのいずれかで取ることができる関数を書くことができます:

それでは、私は週EnumSetの上に持っていると私は月EnumSetのを持っているとしましょうこれらのEnumSets? (EEnumを拡張するため)

+0

"自分のメソッドで参照設定"しようとしたコードを表示し、 "そのEnumSetに関連付けられたメソッドを使用できない"場合はどうなりますか。 –

+0

1. 'E'は' Week'だとどう思いますか? 2.配列をとる 'Set.add()'はありません。 'addAll(Arrays.asList(array))'のようなものが必要です。 3. 'Week'は' DayOfWeek'となるべきものの名前を非常に混乱させます。 – shmosel

+0

1.パラメータとして渡されたものが、どのような型Eが与えられているのか、私のメソッドで知りたい。 2. Enumを個別に追加したい場合はどうすればよいですか? Week.values()を無視します。 3.これは、私が欲しいものを実証しようとするための簡単な書き上げです。 –

答えて

1
public <E extends Enum<E>> EnumSet<E> addIntervals(EnumSet<E> set) { 
    ... 
    for (Week day : oddWeekDays) { 
    set.add(day); 

このメソッドのシグネチャは、「私は、任意のEnumSetインスタンスを受け入れる」と言い、まだあなたがセットに具体的なWeekタイプを追加しようとしています。たとえば、EnumSet<Day>タイプをaddIntervals()に渡したとしたらどうなるでしょうか?

Weekインスタンスをセットに追加する場合は、メソッドにEnumSet<Week>を受け入れ、Eジェネリックタイプを削除するだけです。

実際にEnumSet<E>インスタンスを受け入れるつもりであれば、ご質問にactually trying to doの詳細を追加してください。

+0

何かを追加しました。うまくいけば編集が私の指摘を明確にしますか? –

+0

あなたが実際にやっていることはまだ分かりません。元の 'addIntervals()'の例は、 'EnumSet 'でしか動作しない可能性があります。あなたが達成しようとしていることの具体的な例を共有することはできますか? shmoselは共通のインターフェースを共有するようにenumをすべて変更することができますが、所有していないenumでは機能しません。 – dimo414

+0

私の方法の目的は、空のEnumSet(WeekやMonthなど)を取り込み、空のEnumSetにすべての曜日を追加して、EnumSetを返します。 –

関連する問題