15

eclipse JDTがプリミティブ型として使用voidしていることに気付きました。これは正しいと考えられますか?

4

7 に答える 7

18

このような場合、Java 言語仕様への移行に勝るものはありません。voidがプリミティブでないことは明らかです。

まず、プリミティブ型voidのリストにありません。後で、JLS は明示的に次のように述べています。

Java プログラミング言語では「void へのキャスト」が許可されていません — voidは型ではありませ

さらに、リテラルのリストではなく、キーワードvoidのリストに表示されます。

あなたが自分のしたことを見た理由、Michael Borgwardt によってうまく説明されました。

だから、あなたのタイトルに答えるには:いいえ。Java ではvoid、プリミティブと見なすことはできません。あなたの体に答えるには: はい、Eclipse JDT コードは、必要なことに対して正しいです。

于 2011-01-13T15:48:23.397 に答える
8

void はプリミティブ型ではありません。メソッドに戻り値がないことを示す単なるキーワードです。一番近いのは java.lang.Void クラスです。これは、Javadocs から次のように説明されています。

Void クラスは、Java キーワード void を表す Class オブジェクトへの参照を保持する、インスタンス化できないプレースホルダー クラスです。

JDT に存在するのは、コードの AST を構築するためだけです。同じドキュメントのフィールド値の説明を見ると、次のように書かれています。

プリミティブ型「void」の型コード。「void」は、メソッドの戻り値の型と型リテラルとしてのみ正当に使用されるという点で特別であることに注意してください。

于 2011-01-13T15:14:04.857 に答える
2

Java 6 API ドキュメントから:

public boolean isPrimitive() - 指定された Class オブジェクトがプリミティブ型を表しているかどうかを判断します。

このクラスがプリミティブ型を表す場合に限りtrue

私は自分自身をチェックしました:

void.class.getName() // void (OK)
void.class.isPrimitive() // true (??)
Void.class.getName() // java.lang.Void (OK)
Void.class.isPrimitive() // false (OK)

バグですか?void がプリミティブ型ではないことはわかっていますが (単なるkeywordだと思います)、なぜ void.class.isPrimitive() が true を返すのですか?

編集:明確にする必要があると思うので、 java:doc bug 7019906を提案しました。私の意見では、次のようにする必要があります。

public boolean isPrimitive() - 指定された Class オブジェクトがプリミティブ型またはキーワード voidを表しているかどうかを判断します。

戻り値: このクラスがプリミティブ型またはキーワード voidを表す場合にのみ true 。

于 2011-02-15T21:19:53.657 に答える
2

あなたのリンクから:

「void」は、メソッドの戻り値の型と型リテラルとしてのみ正当に使用されるという点で特別であることに注意してください。

また、これは AST ノード、つまり Java 言語の構文に関係するクラスであることにも注意してください。

基本的に、言語構文をモデル化する場合、voidはプリミティブ型と同じ場所にいくつか現れるため、構文を Java クラスとして表現する場合は、同様に分類する必要があります。

于 2011-01-13T15:18:12.217 に答える
0

私が知っているように、それはプリミティブ型ではありません。ただし、リフレクションの理由から、クラス Type にこの定数があります。

于 2011-01-13T15:15:29.243 に答える
0

参照したjavadocに書かれているものは次のとおりです。

プリミティブ型「void」の型コード。「void」は、メソッドの戻り値の型と型リテラルとしてのみ正当に使用されるという点で特別であることに注意してください。

太字の単語に注意してください。これですべてが説明できると思います。

于 2011-01-13T15:20:01.657 に答える