問題タブ [enumset]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - この Java EnumSet 初期化構造はどのように機能しますか?
次の例EnumMap<K,V>
のように、インスタンスを構築する習慣があります。EnumMapExample.java
簡単な答えがある質問の可能性がありますがprivate final EnumMap<TestEnum, String> myEnumMap
、2つの(不自然な)列挙型で満たすこの方法がどのように呼び出され、どのように機能するかをGoogleで見つけることはできませんか?
質問の絞り込み: だから、セミコロンの前のnew EnumMap<K,V>(SomeEnum.class){{ /* initialization code */ }};
二重中括弧に注意してください。その二重中括弧は何ですか?{{ }}
;
java - Java のスレッドセーフ列挙セット
次のコードを使用して、EnumSet の同期インスタンスを初期化します。
2 つの質問があります。
- この場合、コンパクトさと効率性などの EnumSet のすべての利点を保持できますか?
- EnumSetの空で同期されたインスタンスを取得するための意味的に豊富な方法はありますか?
java - JavaでEnumSetを適切に拡張/サブクラス化するにはどうすればよいですか?
私はEclipseEnumSet
で実装するために拡張しようとしました。Comparable
しかし、私は最初から間違いだらけです。これが私が始めるものです:
(課題 1) 明示的なコンストラクターの定義
それはすぐに私に通知します:Implicit super constructor EnumSet<Suits>() is undefined for default constructor. Must define an explicit constructor.
したがって、私はクイックフィックスに従い、次のコンストラクターを追加します:
...その後、次のように通知されますThe constructor EnumSet<Suits>(Class<E>, Enum[]) is not visible
。このクラスとこのコンストラクターの両方のアクセス修飾子を無駄に変更しようとしました。
(課題 2) 抽象メソッドのオーバーライド
次の問題は、先に進んで次のエラー Eclipse レポートを修正することにしたときです: The type ExtendedEnumSet must implement the inherited abstract method AbstractCollection<Suits>.iterator()
. もちろん、これは氷山の一角にすぎません。もう一度クイック フィックス ( add unimplemented methods
) を使用すると、以下が追加されます。
次にレポートする場所The method addAll() of type ExtendedEnumSet must override or implement a supertype method
。と に対してこのエラーがエコーされaddRange
ますcomplement
。:addAll
から署名をコピーできます。しかし、API ドキュメントから他のメソッド シグネチャ ( 、) をコピーしようとすると、存在しないようです。私は途方に暮れています。Set
public boolean addAll(Collection<? extends Suits> collection)
addRange
complement
私はEnumMap
代わりに行ってきました、そしてそれはうまくいきます。EnumSet
不可能のようです。何か不足していますか?
java - EnumSet に型引数を追加すると、常に「境界の不一致」が発生します
私は以下のコードを持っています:
以下のように1つのメソッドをオーバーロードし、バインドされた不一致を取得したい:
そして、私は以下に変更しましたが、うまくいきません。
なんで?そして、どうすればよいですか?
java - 読み取り専用の EnumSet イテレータはスレッドセーフですか?
最終的で不変の がEnumSet
あります。つまり、コンストラクターで一度初期化されます。
このスレッドのcontains()
メソッドは安全ですか? EnumSet
内部的にイテレータを使用して内容チェックを行っています。したがって、2 つのスレッドが同時に を呼び出している場合contains()
、1 つの呼び出しでのイテレータの位置が他のスレッドに影響を与える可能性がありますか? それとも、これら 2 つのスレッド呼び出しでイテレータのインスタンスが異なるのでしょうか?
java - マップ操作時の不具合、オブジェクト> Javaで
member
inは、異なるEnum タイプを持ついくつかの種類のEnumSetMyClass
を格納するために使用されます。相対メソッドを実装しているときに、次のようにメソッドを呼び出そうとすると、いくつかの問題が発生します。
エラーが発生します:
putEnumSet(Class<E>, E)
型のメソッドMyClass<Word>
は引数に適用できません(Class<capture#1-of ? extends EnumSet>, EnumSet<Category>)
この問題に対処するには?raw typeまたはtype eraserに由来する可能性があると思いますが、主な理由はわかりません。ありがとう。
java - Java Enum に Set と Map が必要な理由
私は列挙型が初めてです。Enum を学習しているときに、EnumSet と EnumMap に出会いました。EnumSet と EnumMap を使用してマップとセットを処理する場合、この質問の対応するハッシュよりもはるかに優れていることを理解しています。
EnumSet または EnumMap がハッシュ化された対応物よりもパフォーマンスが高い可能性が高いのはなぜですか?
私の質問は
Java で Enum の Map と Set が必要になるのはどのようなシナリオですか?
私は実際のシナリオを知ることにもっと興味があります。
java - Eclipse コンパイラーと javac の不一致 - 列挙型、インターフェース、およびジェネリック
次のコードは、Eclipse でコンパイル (および期待どおりにテストを実行) します。
ただし、javac
直接 (JDK 7) または Maven 経由でコンパイルすると、次のエラーで失敗します。
正直なところ、列挙型 + インターフェース + 型パラメーター (ジェネリック) の複雑さが一気に複雑になり、コードを書いているときに気が遠くなりましたが、ようやく正しく理解できたと思いました。
目標は、次のような呼び出しコードを記述することです。
たとえば、Eclipse では、次のテストがコンパイルされ、パスします。
Eclipse と javac のどちらが「正しい」かについての手がかりをいただければ幸いです。
また、アイデアを実装するための代替方法についてのアドバイスも高く評価されます。クラスを、で使用できEnumSet.allOf()
、Enum オブジェクトのタイプを決定するメソッド param として使用します。EnumSet
ところで、このメソッドの目的をわざわざ批判しないでください。より便利で意味のあるコードから減らしました。「列挙型から最初の要素を見つける」ことのメリットについて議論することに興味はありません-それはこの質問のポイントではありません。