APIで
「Voidクラスは、Javaキーワードvoidを表すClassオブジェクトへの参照を保持するインスタンス化不可能なプレースホルダークラスです。」
Java.lang.Void
はいつ使用されますか?クラスが「インスタンス化不能」である場合、それはどのような用途に使用されますか?Java.lang.Void
とvoid
の違いは何ですか?Void
の-ポイントのみは、Void.TYPE
のようなもので、void.class
を保持します。 void
を返すメソッドへのリフレクション参照があり、その戻り値の型を取得すると、Void.TYPE
を返します。
他の目的に使用することはできませんし、使用すべきではありません。
Java.lang.Void
は Java.lang.Integer
に類似しています。 Integer
は、プリミティブ型int
の値をボクシングする方法です。 Void
は、プリミティブ型void
の値をボクシングする方法です。
「しかし、待ってください、void
には可能な値がありません!」
正しい!それがJava.lang.Void
を「インスタンス化不能」にするものです。 :)
これはJava型システムのすてきな機能です。すべてのプリミティブ型にはボックス化された同等物があります。int
はInteger
を、long
はLong
、byte
にはByte
...があり、void
にはVoid
があります。Void
dind'tが存在します。
「それでは、Java.lang.Void
とvoid
の違いは何ですか?」
簡単です。 void
はプリミティブ型です。 Void
は、Object
を継承する参照型です。それらはどちらも可能な値を持たないという点で似ています。しかし、それにもかかわらず、タイプシステムの観点からは、2つの非常に異なるタイプです。
「しかし、私のプログラムではVoid
を使用していません。」
そして、私はGarbageCollectorMXBean
を使用していません。いくつかの機能は、haveを非あいまいに使用しません。大丈夫。
Voidは(JDK 1.5以降の)voidのオートボクシング機能です。
Voidは参照ですが、voidはプリミティブ型です。
そのため、要件がVoid ???
プリミティブを使用できないジェネリック型の一般的な使用法。
たとえば、Android
AsyncTaks<Params, Progress, Result>
Progress updateを取得したくない場合はどうなりますか。ここではvoid(プリミティブ型)を使用できません。Java.lang.Voidが必要です
Void
を使用する別の例は、SwingWorker
です。
new SwingWorker<Void, Integer> () {
@Override
protected Void doInBackground(){
...
}
@Override
protected void process(List<Integer> chunk){
...
}
@Override
public void done(){
...
}
}.execute();
メソッド自体の外部でメソッドの戻り値の型を指定する必要がある場合があるため、Voidは便利です。
たとえば、これは Java 8ラムダ式 で、これはEventResourceオブジェクトに特定のプロパティがあるかどうかを、checkBenefitConcertInCentralPark
というメソッドを使用してcheckCreatedEvent
メソッドに渡してチェックします。
eventChecker.checkCreatedEvent(TestEvents::checkBenefitConcertInCentralPark);
checkBenefitConcertInCentralPark
メソッドは次のように定義されます(Voidの使用に注意してください):
public static Void checkBenefitConcertInCentralPark(EventResource eventResource) {
// JUnit code here...
// assertThat(blablabla :) )
return null; // we can only return null at the end of a method when returning Void
}
そして、checkBenefitConcertInCentralPark
メソッドがcheckCreatedEvent
メソッドに渡されます。
// Function<EventResource, Void> describes the checkBenefitConcertInCentralPark method
public void checkCreatedEvent(Function<EventResource, Void> function) {
function.apply(this.eventResource);
}