問題タブ [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 - インターフェイスに静的メソッドがないのに、静的フィールドと内部クラスは問題ないのはなぜですか? [Java8以前]
インターフェース内で静的メソッドを定義できない理由について、ここでいくつかの質問がありましたが、基本的な矛盾に対処するものはありません: インターフェース内で静的フィールドと静的内部型を定義できるのに、静的メソッドを定義できないのはなぜですか?
静的な内部型は、新しいクラスを生成する構文糖衣にすぎないため、おそらく公正な比較ではありませんが、なぜメソッドではなくフィールドなのですか?
インターフェース内の静的メソッドに対する議論は、JVM が使用する仮想テーブル解決戦略を壊すというものですが、それは静的フィールドにも同様に適用されるべきではありません。つまり、コンパイラはそれをインライン化できますか?
一貫性は私が望んでいるものであり、Java はインターフェース内でいかなる形式の静的もサポートしないか、一貫してそれらを許可する必要があります。
java - これが Java コンストラクターと静的イニシャライザーで 65,535 バイトの制限を超えるのはなぜですか?
免責事項: Java で実行時にこれを生成できることを認識しています。これは、一部のコードのパフォーマンス テスト中に非常に特殊なケースで必要でした。私は別のアプローチを見つけたので、これは実用的なものよりも単なる好奇心です。
以下を静的フィールド、インスタンス フィールドとして試し、コンストラクター内で直接初期化しました。Eclipse が「コンストラクタ TestData() のコードが 65535 バイトの制限を超えています」または「静的イニシャライザのコードが 65535 バイトの制限を超えています」と通知するたびに。
10,000 個の整数があります。各 int が 4 バイト (32 ビット) の場合、それは 40,000 バイトではないでしょうか? 単に配列を構築するだけのデータに加えて、25,000 バイト以上のオーバーヘッドが実際にありますか?
データは、この小さな Python で生成されます。
ここに小さなサンプルがあります:
java - 固定/可変アリティ (varargs) の両方に一致する最も具体的な方法
Java 言語仕様のセクション 15.12.2.5 では、固定アリティのメソッドと可変アリティのメソッド (つまり ) の両方の場合で最も具体的なメソッドを選択する方法について説明していますvarargs
。
JLS で見つけられないのは、1 つは固定アリティで、もう 1 つは可変アリティの2 つの方法の間で決定することです。例えば:
期待どおりにコンパイルされます (以下に Yoni が概説する理由によります)。この呼び出しコードは以下もコンパイルします。
それを実行すると、method #1
(つまり、非可変引数メソッド) が呼び出されます。この呼び出しコードがあいまいではないのはなぜですか? 固定アリティ方式が可変アリティ方式よりも具体的なのはなぜですか? 誰かが仕様の関連するビットを教えてもらえますか?
java - 既知のタイプのクラスリテラルを作成する方法:クラス>>
次のようにします。
ジェネリックスを満たし、コンパイルするこのメソッドからどのクラスリテラル式を返すことができますか?List.class
コンパイルせず、どちらもコンパイルしませんList.<String>class
。
「なぜ」とお考えの場合は、Springの実装を作成しています。これには、の実装FactoryBean<List<String>>
が必要ですClass<List<String>> getObjectType()
。ただし、これは春の質問ではありません。
編集:私の哀れな叫びはSpringSourceにいる勢力によって聞かれたので、Spring 3.0.1ではreturnタイプがにgetObjectType()
変更されClass<?>
、問題をうまく回避できます。
java - Javaでのパラメータ保証の実行順序は?
次の関数呼び出しがある場合C
:
barFunc
およびの実行順序はBazFunc
指定されていないため、の前または前にbarFunc()
呼び出すことができます。bazFunc()
bazFunc()
barFunc()
C
Java
関数の引数式などの実行順序を指定していますか?指定されてC
いませんか?
java - Java 言語仕様第 3 版の正誤表
私は JLS を学習と教育の両方のリソースとして広く使用していますが、いくつかのエラーがあることに気付きました。
単純なタイプミス ( JLS 5.1.4の "convesions" など) もありますが、かなり重大なエラーと思われるものもあります。
たとえば、JLS 18.1 The Grammar of the Java Programming Languageは、Java 言語の文法の正式なリファレンスであるはずですが、決して使用されることのない作成規則が含まれています。(例MoreStatementExpressions
)。確かにこれは、与えられた文法の他の部分でより深刻なエラーの兆候ですよね?
では、第 3 版の正誤表はありますか? ありますか?見つかったエラーを Sun/Oracle に送信する必要がありますか? 第4版はいつか出ますか?
java - JLSには、静的初期化ブロックの実行順序に関する保証はありますか?
次のような構造を使用するのは信頼できるのだろうか。
初期化するブロックの前に初期化ブロックが実行されるNullPointerException
ため、取得する可能性はありますか?msgSource
engMessages
msgSource
(上部の初期化ブロックの最後で初期化を行わない理由について:好みの問題です。説明されている構造が信頼できない場合は、そうします)
java - Javaのサブコンテキストはスタック上の別々の行ですか?
Javaの場合、これは次の場合です。
私が疑問に思っているのは、これです。 -statementx
のスコープに限定されているという事実if
は、Javaコンパイラの機能にすぎないのでしょうか、それとも-statementx
の後で実際にスタックから削除されているのでしょうか。if
java - Java「フレッシュ型変数」
JLSの変換とプロモーションの章で「新しい型変数」とはどういう意味ですか?