問題タブ [jls]
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 言語仕様: 表記法の意味 |S|
型キャストセクション 5.5.1を理解するためにJLS 7を調べています。
コンパイル時の参照型 S (ソース) とコンパイル時の参照型 T (ターゲット) が与えられた場合、次の規則によりコンパイル時のエラーが発生しない場合、S から T へのキャスト変換が存在します。S がクラス型の場合:
- T がクラス型の場合、|S|のいずれかです。<: |T|、または |T| <: |S| . そうしないと、コンパイル時エラーが発生します。
セクション 4.10でS と T が 2 つの型であるかどうかを明確にしました。
- S :> Tは、S が T のスーパータイプであることを示します
- S > Tは、 S が T の適切なスーパー タイプであることを示します。これは、 S :> TおよびS != Tを意味します。
|S|の意味がわかりません。. |S|の意味を理解するのを手伝ってください。? プロパティの数と種類、または何か他のことを意味しますか。JLS自体で検索しようとしましたが、意味が見つかりませんでした。前もって感謝します。
java - Java final フィールドのコンパイル時の定数式
以下のテキストは、jls http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.5.3からのものです。
それでも、いくつかの合併症があります。フィールド宣言で final フィールドがコンパイル時の定数式 (§15.28) に初期化されている場合、その final フィールドの使用はコンパイル時に定数式の値に置き換えられるため、final フィールドへの変更は観察されない場合があります。 .
どなたか、上記のより良い説明を教えてください。「最終フィールドへの変更は観察されない可能性があります」という文が理解できませんでした。例の助けを借りて 5 月。
java - Javaインターフェースの定数に対して「public static final」は冗長ですか?
このコード:
コンパイルして、期待どおりに動作しました。これは次と同じように見えます:
Javaインターフェースの定数に対して「public static final」は冗長ですか? これは Java 1.1、1.2、1.3、1.4、...、1.8 に当てはまりますか、それとも Java リリースで変更されましたか?
java - サブパッケージのみのオンデマンド輸入申告
関連 :そのようなクラスがない場合、ant/javac で "import pack.*" をコンパイルするにはどうすればよいですか?
与えられたパッケージ構造があるとします
パッケージには 2 つのサブパッケージと(パッケージの下にクラスはありません)parentのみが含まれます。abparent
Maven でコンパイルされたimport parent.*以外のパッケージにあるコード(つまり) は、コンパイル時エラーをスローします。エラーは次のとおりです。parentjavac
パッケージの親が存在しません
そのような場合(実際には型がインポートされないオンデマンド宣言)についてJava言語仕様を調べました。インポートオンデマンド宣言に関するJLSのパラグラフ7.5.2は、この動作を指定していないようです。
これは のバグjavacですか? コンパイル エラーを回避する方法を尋ねているわけではありません。javacJLS で必要な参照が見つからないため、エラーがスローされる理由を知りたいです。これはバグかもしれないと私に信じ込ませました。
JDK 1.4、1.6、1.7、および 1.8 でテストしましたが、エラーは同じです。
ちなみに、Eclipse では同じコードを使用してもコンパイル エラーは発生しません (Eclipse Indigo、Juno、Luna、および Mars でテスト済み)。
注: Eclipse コンパイラーのみに依存する (古い) 既存のプロジェクトを "mavenize" しているときに、この動作に遭遇しました。これがコンパイル エラーの根本的な原因であることを特定するのにしばらく時間がかかりました。
java - リフレクションによる最終変数の変更、静的最終変数と非静的最終変数の違いの理由
以下のコードを参照してください。コードを実行すると、最終的な非静的変数の値を変更できます。しかし、最終的な静的変数の値を変更しようとすると、 がスローされjava.lang.IllegalAccessExceptionます。
私の質問は、静的でない最終変数の場合、またはその逆の場合に例外をスローしないのはなぜですか。違いはなぜですか?
java - オブジェクトとプリミティブを「==」演算子で比較するのはいつ合法ですか?
以下の (Java) コードは合法ですか?
JDK 6 に対してはコンパイルされませんが、7 以降では問題ないようです。仕様変わった?バグは修正されましたか?私はhttp://bugs.eclipse.org/bugs/show_bug.cgi?id=416950で議論してきましたが、これについてはどちらの方法でもかまいません。