「void」(メソッドから返された小さな v) が参加できる Java のステートメントはありますか?
たとえば、voidMe() instanceof Void
どこで行うことさえできないようです:
void voidMe(){...}
.
(これは好奇心からの理論的な質問です。)
はい - 簡単なメソッド呼び出し:
voidMe();
それは声明です。
式を意味する場合は、
voidMe()
もやはり式です。結果が何もない式です。JLS のセクション 15.1から:
プログラム内の式が評価 (実行) されると、結果は次の 3 つのいずれかを示します。
変数 (§4.12) (C では、これは左辺値と呼ばれます)
値 (§4.2、§4.3)
なし (式は void と言います)
...
値を返さないメソッドを呼び出すメソッド呼び出し (§15.12)、つまり void と宣言されたメソッド (§8.4) である場合に限り、式は何も意味しません。そのような式は、式ステートメント (§14.8) としてのみ使用できます。これは、式が表示される可能性のある他のすべてのコンテキストで、式が何かを示す必要があるためです。
強調表示された部分は、基本的に、 などの式の使用はメソッド呼び出しのみであることを示しています。その一部としてvoidMe()
持つことができる「より大きな」表現はありません。voidMe()
Java仕様§8.4.2からコピーしました
戻り値の型 R 1を持つメソッド宣言 d 1は、次の条件が満たされる場合に限り、戻り値の型 R 2を持つ別のメソッド d 2の戻り値の型で代用可能です。
- R 1が である場合
void
、R 2はvoid
です。
クラス リテラルJava 仕様 §15.8.2で使用できます。
void.class
( §8.4.5 )の型は ですClass<Void>
。
...
クラス リテラルは、現在のインスタンスのクラスの定義クラス ローダーによって定義されているClass
ように、名前付きの型 (または ) のオブジェクトに評価されます。void
Java ではvoid
、型またはオブジェクトではありません。したがって、「式」の一部にすることはできません。
式内の任意の演算子または関数は、その引数を入力として使用します。ただし、void は有効な型ではなく、void 型のオブジェクトがないため、式を評価することはできません。
したがって、すべての void 関数は、それ自体がステートメントでなければなりません。
Void
「Void クラスはインスタンス化できないプレースホルダー クラスです」ため、 のインスタンスを作成することもできません。
Void はインスタンス化できないため、その値をどこでも使用することはできません。(真剣に、何もない状態で何をしたいですか? どうして何もないインスタンスを持つことができますか?)
ただし、Void を型パラメーターとして宣言することはできます。これは、java.concurrent パッケージのいくつかのクラスを使用する場合に必要です。たとえば、executor サービスに void メソッドを送信するには、Future<Void> を宣言する必要があります。1 つの場所で結果を求めることができます。結果は Void 型になります。この結果は常に null です。