問題タブ [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 - JVM はスーパークラスとサブクラスのフィールドをどのように開始しますか?
次のコードの出力が「null」である理由を誰かが知ることができますか? 複雑なオブジェクトを構築し、詳細をそのサブクラスに委譲する最良の方法は何ですか?
java - を使用したジェネリック メソッド呼び出し
このような一般的なメソッド呼び出しを理解するのに問題があります:
上記の状況のコンテキストは次のとおりです。
問題は、呼び出しの<T>前にどのような役割を果たすかです。getObject(objectName)
java - クラスのパラメータ化された呼び出しとは
JLS、セクション 9.6.1 ( http://docs.oracle.com/javase/specs/jls/se7/html/jls-9.html#jls-9.6.1 ) には次のように記載されています。
「注釈型で宣言されたメソッドの戻り値の型が次のいずれでもない場合は、コンパイル時エラーです: プリミティブ型、文字列、クラス、クラスのパラメーター化された呼び出し、列挙型 (§8.9)、注釈型、または要素型が前述の型の 1 つである配列型 (§10)。」
「クラスのパラメータ化された呼び出し」とは何ですか? 例はありますか?
java - Java文法の複数の型引数リストを持つコンストラクター
Java 言語仕様 v7 の Java 文法では、コンストラクターに対して次の文法規則が指定されています。
ここで私を困惑させるのはCreatedNameルールです。というような表現で、
有効なコンストラクターになります。もちろんそうではありません。
Class1.Class2実際、識別子のチェーン (例: ) が複数の型パラメーター リスト (例: ) を持つケースは見つかりません<Integer>。そのような場合は存在しますか、それとも文法は意味をなしませんか?
参考までに、JLSのセクション 15.9に記載されている同等の文法規則は、同じ問題を示しています (これらの規則は、セクション 4.3TypeDeclで定義されている非終端記号を参照しています)。
java - Enum で hashCode() が ordinal() 関数ではなく Object hashCode() 実装を参照するのはなぜですか?
序数はhashCodeの完全な候補のように見えるため、 enum hashCodeはJava の序数を参照していると常に考えていましたが、 enum hashCodeは実際にはデフォルトのhashCode オブジェクト実装を参照していることが判明しました。
これはJLSと矛盾しないことは理解していますが、それでもこれは驚きであり、なぜこのように作成されたのかわかりません。私はJVMを推測しますが、一意の保証を提供するために何らかの形でこれに依存できた可能性がありますが、これは 64 ビットJVMには当てはまりません。
JDK 1.6 と最新の JDK 7 をチェックインしましたが、これは両方で同じ方法です。
なぜこのように作られたのか、理由を知っている人はいますか?
ordinalをhashCodeとして使用することは完全に理にかなっています。これは、必要なすべての資格情報を満たし、ある JVM の開始から別の JVM の開始まで一貫性があるためです。これは必須ではありませんが、あると便利です。
java - 修飾名とフィールド アクセス式の違いは何ですか?
保護されたメンバーが宣言されているクラスを C とします。アクセスは、C のサブクラス S の本体内でのみ許可されます。
さらに、Id がインスタンス フィールドまたはインスタンス メソッドを表す場合、次のようになります。
アクセスが修飾名 Q.Id による場合 (Q は ExpressionName)、式 Q の型が S または S のサブクラスである場合にのみアクセスが許可されます。
フィールド アクセス式 E.Id (E はプライマリ式) によるアクセス、またはメソッド呼び出し式 E.Id(. . .) (E はプライマリ式) によるアクセスである場合、アクセスは次の場合にのみ許可されます。 E の型が S または S のサブクラスである場合。
修飾名とフィールド アクセス式の違いは何ですか?
java - クラスファイル形式に従って、インターフェイスがオブジェクトを拡張するのはなぜですか?
JVM 仕様では、インターフェイスが拡張されていないにもかかわらず、インターフェイスsuper_classに of が必要であると規定されているのはなぜですか?java/lang/Objectjava/lang/Object
私は特にJVM 仕様の§4.1を参照しています。
インターフェイスの場合、super_class アイテムの値は常に、constant_pool テーブルへの有効なインデックスである必要があります。そのインデックスの constant_pool エントリは、クラス Object を表す CONSTANT_Class_info 構造体でなければなりません。
しかし、JLS の§9.2では、インターフェースは Object を拡張しないと述べています。代わりに、暗黙的に作成された抽象メソッドが宣言され、Object クラスの各パブリック メソッドに一致します。
インターフェイスに直接のスーパーインターフェイスがない場合、インターフェイスは、署名 s、戻り値の型 r、および throws 句 t を持つ各パブリック インスタンス メソッド m に対応する、シグネチャ s、戻り値の型 r、および throws 句 t を持つパブリック抽象メンバー メソッド m を暗黙的に宣言します。ただし、同じシグネチャ、同じ戻り値の型、および互換性のある throws 句を持つメソッドがインターフェイスによって明示的に宣言されている場合を除きます。
java - JLS が最大の int リテラルが 2147483648 であると述べているのはなぜですか?
JLS 3.10.1. Integer Literals http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.10.1の状態
同時にこのライン
コンパイルエラーを生成します
JLSは間違っていますか?
java - Java 言語仕様に「重大な変更」があったことはありますか?
おそらく広く知られている「assert」キーワードの導入の例外を除いて、古いコードがJDKの新しいソースレベルと互換性がなくなる原因となったJava言語仕様の変更があったことはありますか?
これまでのまとめ (コメントありがとうございます):
「古い」Java コードは、後のバージョンの Java 言語仕様 (JLS) で導入されたキーワードの 1 つを使用して宣言を使用している場合、新しいバージョンにアップグレードするときにコンパイル エラーを引き起こす可能性があります。
- 主張する
- 列挙
- strictfp
java - オペランドの型が小さい場合、JLS は加算の結果が int であることをどこで指定していますか?
なぜ私は型の不一致を取得しています: can't convert from int to byteを参照して、byteオペランド間の加算の結果が自動的に に拡張されると言及されている場所を見つけるために、JLS でクイック検索を試みましたint。
私が見つけた最高のものはこのチュートリアルでしたが、JLSには何も見つかりませんでした。
変換の章では、加算演算子については何も言及されていません。少なくとも私は何かを見つけることができませんでした。Additive Operatorsの段落では、バイトの自動拡張については言及されていません。それは言及していますが the type of each of the operands of the binary - operator must be a type that is convertible (§5.1.8) to a primitive numeric type、拡大については何もありません。また、バイトは数値データ型です。
私は何が欠けていますか?