問題タブ [final]

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 投票する
1 に答える
11725 参照

objective-c - Objective-Cでローカルの「変数」を最終として宣言する方法は?

Java では、ローカルの「変数」を final として宣言できます。

その値を変更しようとすると、コンパイラからエラーが発生します。誤って値が変更されるのを避けるために、ローカルの「変数」のいくつかを最終的に宣言したいと思います。

これはObjective-Cで可能ですか?

0 投票する
8 に答える
3319 参照

java - ファイナルの過度の使用は、善を行う以上に傷つく可能性がありますか?

なぜ人々はクラス内のすべての変数を「最終」にすることにそれほど重点を置いているのですか?プライベートローカル変数にfinalを追加したり、定数以外の目的でfinalを使用したり、変数を匿名の内部クラスに渡したりすることに真のメリットがあるとは思いません。

私はどんな種類の炎上戦争も始めるつもりはありません、私は正直に言って、これが何人かの人々にとってとても重要である理由を知りたいです。私は何かが足りないのですか?

0 投票する
9 に答える
174825 参照

java - メソッド パラメータの final キーワード

次のようなメソッドによく遭遇します。

最終パラメータを渡さずにこのメソッドを呼び出すとどうなりますか。つまり、後で変更された (したがって final として宣言されていない) Object1 は、このメソッドに問題なく渡すことができます。

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

java - Javaで渡された最終変数は、反対側でも最終のままですか?

少し混乱するコードに出くわしました。明確にしたいのは実際には2つのバリエーションです。

例 1:

file" "を宣言する目的は何finalですか? Javaプリミティブは値で渡され、 をgetAbsolutePath()返すだけなStringので、変数はfinal反対側(メソッドの呼び出し側)にはありませんよね? また、変数はこれら 2 行のスコープ内にしか存在しないため、キーワードfileの目的がまったくわかりません。final足りないものはありますか?これを行う理由がわかる人はいますか?

例 2:

ここでは実際のオブジェクトが返されているので...それはfile変数がconstant/final反対側になるということですか...? 意味がないようです。

一般に、アクセスタイプなしで変数を渡すように思えます。のように、private関数内に変数publicを返す get 関数を使用できますが、関数を呼び出して変数を受け取る変数には、アクセス修飾子を指定する必要があります。したがって、 を指定するpublicと、返される変数はpublicそのスコープ内になります。を指定するprivateと、返される変数はprivateそのスコープ内になります。との違いはありfinalますか?変数の「恒常性」は渡すことができるものですか? 私がJavaについて知っていることを考えると、これはかなりありそうもないことだと思います。

finalまたは、ポイントを完全に見逃しており、上記のコードのキーワードには他の目的がありますか?

編集:

コードを書いた元の開発者に確認したところ、finalキーワードを入れただけだったとのことでした。彼は当初、このメソッドはもっと長くなると考えていたので、ファイル全体が一定に保たれるようにしたかったからです。彼はまた、一般的に変更すべきではない変数を として宣言しfinal、原則として、原則として、以下の両方の回答で言及されていると述べました。したがって、標準的な理由で含まれている単純な追加のキーワードを読みすぎていたようです。みんな、ありがとう!

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

php - PHP クラスが final として定義されている場合、そのメソッドも final として定義するのは理にかなっていますか?

final として定義されたクラスがあります。メソッドを final として定義することは理にかなっていますか? クラス自体が final であるため、拡張できないため、メソッドの final 宣言が冗長になることはわかっていますが、クラスなどに関するドキュメントを作成したいと考えており、メソッドがそこにあるので、すぐにわかります。

これに関する PEAR のコーディング標準には何も見つかりませんでした。

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

java - 最終インスタンス フィールドでコンストラクターを再利用する

不変になろうとする次のクラスがあるとしましょう

そして、質問のために、このクラスにビルダーを使用したくないと仮定しましょう (問題を解決します)。

質問は次のとおりです。

イプシロンの最終修飾子を削除せずに、2 つのコンストラクターを保持せずに、この動作を実現する方法はありますか?

つまり、次のようなことをしなくても

ビルダーを使用せずに

0 投票する
4 に答える
38034 参照

java - Java-静的初期化ブロックで最終変数を初期化できますか?

私のJava言語の理解に基づいて、静的変数はで初期化できますstatic initialization block

ただし、これを実際に実装しようとすると(static変数finalも)、以下のスクリーンショットに示すエラーが発生します。

https://i.stack.imgur.com/5I0am.jpg

0 投票する
6 に答える
4455 参照

javascript - JavaScript オブジェクトのプロパティの置換を防ぐ方法はありますか?

オブジェクトの構造を不変にして、後でそのプロパティが置き換えられないようにしたいと考えています。ただし、プロパティは読み取り可能である必要があります。これは可能ですか?

finalこれをサポートする言語機能 ( Java およびC#の行に沿って) はないと確信していますがreadonly、同じ結果を達成するための別のメカニズムがあるかどうか疑問に思いましたか?

私はこれらの線に沿って何かを探しています:

0 投票する
8 に答える
33538 参照

java - 最終的な静的変数はJavaでスレッドセーフですか?

私はかなり読んだことがありますが、決定的な答えは見つかりませんでした。

私は次のようなクラスを持っています:

そして、FooのインスタンスからsharedDataにアクセスするのがスレッドセーフかどうか疑問に思っています(コンストラクターとdoSomethingUseful()に示されているように)。Fooの多くのインスタンスは、マルチスレッド環境で作成されます。

私の意図は、sharedDataが静的初期化子で初期化され、その後は変更されないことです(読み取り専用)。

私が読んだことは、不変オブジェクトは本質的にスレッドセーフであるということです。しかし、私はこれをインスタンス変数のコンテキストのように見えるものでのみ見ました。不変の静的変数はスレッドセーフですか?

私が見つけた他の構成はConcurrentHashMapでした。タイプConcurrentHashMapのsharedDataを作成できますが、それに含まれるHashMapもタイプConcurrentHashMapである必要がありますか?基本的に..

また

それとも、より安全でしょうか(ただし、単にclone()を実行する方がコストがかかります)。

TIA。

(静的初期化子は、より多くのコンテキストを提供するように編集されています。)

0 投票する
4 に答える
11532 参照

java - クラスのすべてのインスタンスに表示される定数セットをどのように宣言する必要がありますか?

クラスのすべてのインスタンスで表示される定数をクラスに設定したいと思います。

まず、「静的」として宣言する必要があるかどうかわかりません。私が理解している限り、静的フィールドの変更(インスタンスの1つによって行われる)は他のインスタンスによって見られます(したがって、静的変数は特定のインスタンスにバインドされません)。さらに、静的フィールドはインスタンスを使用せずに変更できます(クラスを直接操作します)。したがって、静的フィールドのこれらすべての特別なプロパティは、それを変更する方法と、これらの変更の効果に関連しています。しかし、私の場合は定数が必要です(したがって、「変更」の問題はここでは関係ありません)。したがって、おそらく「静的」を使用する必要はありません。右?

次に、私のセットには多くの要素が含まれているので、セットの値を一度に定義したくありません(変数を作成するとき)。つまり、セットを宣言してから、このセットに要素を段階的に追加したいと思います。しかし、定数を使って作業する場合、それはできません。セットの値を指定して一定にすることはできますか?

第三に、メソッドの外部で変数の値を変更しようとすると、いくつかの問題が発生する可能性があることに気付きました。それで、それはどのように機能しますか?

追加した:

わかった。答えのおかげで、「final」と「static」である必要があることがわかりました(これは定数セットであり、特定のインスタンスに関連付けられないため、クラスのすべてのインスタンスに表示される必要があります)。しかし、私はまだ問題を抱えています。「追加」を使用してセットを指定したかったのですが、定数(最終)の場合はセットに追加できません。さらに、メソッドの外部で変数の値を変更することはできません(なぜですか?)。とにかく、私はセットを定義するために「追加」の使用法を主張しません。すぐに定義する準備ができています。しかし、私はそれを行う方法がわかりません。私はそのようなことを試みました:

そして、彼らは機能しませんでした。

追加2:

誰かが私に、お願い、Tadeusz Kopecによって与えられたコードを説明できますか?


1.fillSetメソッドには「set」と呼ばれる1つの変数があります。なぜメソッドで使用されないのですか?
2.何がSomeType()入っていfillSetますか?この方法は何をしますか?
3.何をしfillSetますか?例の後半で、このメソッドに空のセットを指定します。何のために?
4.何のためにtempSet最終として宣言しますか?
5.正確には何をunmodifiableSetしますか?名前からすると、変更できないセットが生成されると思います。しかし、なぜ宣言するのに不十分なyourSetFieldfinalですか?それよりも一定だろう。