問題タブ [unmodifiable]

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.

0 投票する
2 に答える
2563 参照

java - Java マップの作成方法変更不可能なキーで?

Map<String,String>Javaでは、値を変更可能に保ちながら、変更不可能なキーを持つを作成するにはどうすればよいですか。

Map<String,String>他の誰かが Map 値を追加/変更できるようにインターフェースを介してこれを渡したいのですが、Map キーを変更することはできません。

より高いレベルの問題の背景は、変数名のリスト/セット (ツリーのような構造を持つ) (Java 文字列として表される) を持っていることです。文字列) を各変数名に使用します。このインターフェースを複数実装して、ツリー階層の命名をさまざまな状況に合わせてさまざまな方法でエイリアスにできるようにしたいと考えています。インターフェイスの実装に、Map<String,String>すでに設定されている一連のキー (値のデフォルトが含まれている可能性があります) を入力し、値 (キーではなく) を変更できるようにするのが最善の方法のようです。名前とエイリアスの間のマッピングを作成しているのでMap<>、理にかなっています。

低レベルの問題に戻ります。コードを次のようにしたい:

あることは知っていますがCollections unmodifiableMap(Map<> m)、それによって値が変更できなくなります。私の値が変更可能なオブジェクトである場合、それらを変更することはできますが、私は固執したいと思いますStrings(単一の String メンバーの set/get を使用して Class を作成したり、public String メンバーを使用して構造のようなクラスを作成したりすることは避けます)。

AKA、私は独自の変更可能なクラス値を作成することを避けCollections unmodifiableMap()、キーをvalue references変更不可能にするために使用したいと思います:

独自の Map を拡張または実装してから、( how のようにCollections unmodifiableMap()) キー throw を変更できるすべてのメソッドをオーバーライドできますUnsupportedOperationException。しかし、Java 8 では、Lambda 関数を使用して追加された多数のメソッドがあり、キーを変更できない限り、インターフェイスの実装者がアクセスできると便利です。

別名、この長くてエラーが発生しやすい手法は避けたいと思います。

の値のデータの変更のみを許可する既存のインターフェイスはありますMaps<>か?

変更不可能なキーMap<String,String>を持ち、変更可能な値を持つa似たものを作成するための他のオプションは何ですか? 可能であれば、適切なコーディング プラクティスに関心があります。

0 投票する
1 に答える
200 参照

c++ - Visual Studio 2013 で変更不可能な左辺値として扱われるポインター

getNode():

ノード交換コード:

私はコンピューター サイエンスのクラスのプロジェクトに取り組んでおり、数日後に期限が切れます。かなり単純なクイックソートを使用してリンクされたリストをソートしたいのですが、リスト内のノードを交換するときに奇妙な問題に苦しんでいます。参考までに、getNode() 関数はリスト内の特定のインデックスにあるノードを返し、ノードは次のノード ポインターと共にギター オブジェクトへのポインターを保持します。私は何時間も実験してきましたが、このような行が「list.getNode(h).element = temp.element;」であることがわかりました。リスト内のノードにあるギター オブジェクトへのポインターに、temp オブジェクトのポインターの値が割り当てられていると言っています。これは通常は機能しますが、この時点で左側が変更可能な左辺値ではないというエラーが表示されます。ただし、ポインターを作成して代入演算子の左側に置くことはできましたが、エラーは発生しませんでした。また、逆参照演算子 (*) を前に使用すると、左側にエラーはありませんが、これはノードを正常にスワップしません。私は何かが欠けているに違いない。

0 投票する
1 に答える
369 参照

java - 関数を使用した UnmodifiableMap値はコンパイルに失敗します

私は参照を持っています:

私は次のように初期化します:

静的ブロックの最後の行 (DELEGATES への代入) で、次のコンパイラ エラーが発生します。

エラー:(64, 48) java: 互換性のない型: 型変数 K、V のインスタンスが存在しないため、java.util.Map は java.util.LinkedHashMap に準拠しています>

私は何かを台無しにしていますか?それとも、変更不可能なビューは関数型が好きではありませんか?

0 投票する
3 に答える
2092 参照

java - 変更不可能なセットをキャストする

キャストできない java.lang.Object があります。デバッグ時に、オブジェクトが変更不可能なセットであることに気付いたので、セットにキャストしようとしましたが、うまくいきませんでした (ClassCastException)。代わりに私は試しました

しかしもちろん、HashSet にはそのようなコンストラクターがないため、それも不可能です。

これを解決するにはどうすればよいですか?

0 投票する
1 に答える
2345 参照

java - 「unmodifiableList」が変更可能であるのはなぜですか?

List要素を削除または追加できない が必要です。Java 8 のCollections.unmodifiableListで答え​​を見つけたと思いました。元のリストを渡すと、おそらく変更不可能なリストが返されます。

しかし、元のリストから要素を削除すると、変更不可能なリストが変更されます。何が起こっている?

このデモ コードを参照してください。オリジナルから削除すると、変更不可能なリストが 3 つの要素 2 から縮小されます。