問題タブ [static-initializer]

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

java - 静的初期化子は、定義される前にフィールドを参照できません

エラーがコメントされた次のコードがあります

私は静的初期化子を使用することにかなり慣れていませんが、これがコンパイルされない理由がわかりません。このトピックに関するいくつかの投稿を調べて、初期化が実行される順序を見てきましたが、これは規則に違反していないようです。b が初期化されるまでに、a はすでに初期化されているはずです。

このクラスをシングルトンとして設定するという回避策がありますが、そうするとコードが少し読みにくくなります。ここで何がうまくいかないのか知りたいです。

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

java - 静的初期化子内の静的初期化子の外側で宣言された型変数

JLS(§8.7)の次のテキストが何を意味するかについて、具体的な例を挙げていただけますか?

[...] 静的初期化子の外で宣言された型変数が静的初期化子内のどこかにある場合、コンパイル時エラーになります。

そして、それをエラーにする理由は何ですか?

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

c# - ネストされた静的オブジェクト インスタンスを含むオブジェクト配列の WebAPI 2 JSON シリアル化が失敗する

新しい PoC のために、いくつかの偽のデータを含む Web API サービスが必要でした。このオブジェクトモデルは、class1 が class2 のネストされた配列を持つ 2 つのクラスという非常に単純なものです。そこで、いくつかのデータをハードコーディングした FakeDataService の構築を開始しました。このサンプルでは簡潔にするために、多くのプロパティを省略しているため、コードは問題の本質に焦点を当てています。

したがって、偽のデータベースの「AllData」は Class1 オブジェクトの配列 (この例では 1 つのみの「配列」) であり、Class1 オブジェクトには文字列プロパティ (prop1)、Class2 オブジェクトの配列 (prop2)、および文字列プロパティの配列 (prop3) に対して、Class2 オブジェクトには 1 つの文字列プロパティ (prop4) しかありません。

WebAPI コントローラーは、次のように基本的なものです。

しかし、Values コントローラーを呼び出すと、結果は次のようになります。

Class2 オブジェクトのシリアル化によって i:nil=true が生成されることに注意してください。

数時間の検索の後 (私のサンプル データは、この単純なサンプルよりもずっと大きいものでした)、ネストされたオブジェクトの配列が静的インスタンスとして定義されていることが問題の根本原因であることがわかりました。例えば。FakeDatabase の初期コードを次のように変更します。

WebAPIコントローラーを呼び出すと、(正しく)次のようになります。

したがって、唯一の違いは Class2 オブジェクトの配列です。この動作の説明は何ですか?

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

java - Java静的イニシャライザが2回呼び出されました

このメソッドは fullname の静的初期化子をトリガーする可能性がありますか? 2回呼び出された静的初期化子に問題があります。isClassLoaded を使用してクラスがロードされているかどうかを確認し、そのクラスを使用しようとすると、コンストラクターが 2 回呼び出されるためにエラーが発生します。Class.forName(fullname, false, Loader.instance().getModClassLoader()); の何が問題なのか誰でも知っています。?

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

java - JDK ライブラリはラムダ 'invoker' ユーティリティ クラスを提供しますか?

個別のスタンドアロン静​​的イニシャラー関数の必要性をラムダに置き換えたいと考えています。たとえば、このようなものを置き換えたい...

クラスのロード時に定義されたラムダを呼び出すものを使用します。これを怠惰に呼び出すことが私の目標ではないことに注意してください。

とりあえず、 を受け取り、それを呼び出して値を返すInitializer静的メソッドを持つ単純なクラスを作成しました。Supplier

Initializerクラス

次に、別のクラスで:

独自のクラスを提供する必要がないように、標準 Java ライブラリに既に存在するものはありますInitializerか、それともラムダをインプレースで単純に定義して実行する方法はありますか?

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

c# - C#でリフレクションによって静的クラス初期化子を見つけるにはどうすればよいですか?

リフレクションを使用してC#で静的クラス初期化子を見つけるにはどうすればよいですか? クラスの型で呼び出されてもGetMembers()、その情報は提供されないようです。