1. 程式人生 > >java.lang.Void 與 void的比較及使用

java.lang.Void 與 void的比較及使用

void關鍵字表示函式沒有返回結果,是java中的一個關鍵字

java.lang.Void是一種型別。例如給Void引用賦值null。

Void nil = null;

通過Void類的程式碼可以看到,Void型別不可以繼承與例項化。

public final
class Void {

    /**
     * The {@code Class} object representing the pseudo-type corresponding to
     * the keyword {@code void}.
     */
    @SuppressWarnings("unchecked")
    public static final Class<Void> TYPE = (Class<Void>) Class.getPrimitiveClass("void");

    /*
     * The Void class cannot be instantiated.
     */
    private Void() {}
}

Void作為函式的返回結果表示函式返回null(除了null不能返回其它型別)。

 Void function(int a, int b) {
    //do something
    return null;
 }

在泛型出現之前,Void一般用於反射之中。例如,下面的程式碼列印返回型別為void的方法名。

public class Test {
    public void print(String v) {}

    public static void main(String args[]){
        for(Method method : Test.class.getMethods()) {
            if(method.getReturnType().equals(Void.TYPE)) {
                System.out.println(method.getName());
            }
        }
    }
}

泛型出現後,某些場景下會用到Void型別。例如Future<T>用來儲存結果。Future的get方法會返回結果(型別為T)。

但如果操作並沒有返回值呢?這種情況下就可以用Future<Void>表示。當呼叫get後結果計算完畢則返回後將會返回null。

另外Void也用於無值的Map中,例如Map<T,Void>這樣map將具Set<T>有一樣的功能。

因此當你使用泛型時函式並不需要返回結果或某個物件不需要值時候這是可以使用java.lang.Void型別表示。