問:Java 中 java.lang.Void 和 void 有什么作用和區(qū)別?
答:void 關(guān)鍵字表示函數(shù)沒有返回結(jié)果器瘪,是 java 中的一個(gè)關(guān)鍵字。java.lang.Void 是一種類型痹届,例如給 Void 引用賦值 null 的代碼為 Void nil = null;
蹬蚁。
通過 Void 類的源代碼可以看到,Void 類型不可以繼承與實(shí)例化外臂。
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 作為函數(shù)的返回結(jié)果表示函數(shù)返回 null (除了 null 不能返回其它類型)坐儿。
Void function(int a, int b) {
//do something
return null;
}
在泛型出現(xiàn)之前,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());
}
}
}
}
泛型出現(xiàn)后罪佳,某些場景下會(huì)用到 Void 類型逛漫。例如 Future<T> 用來保存結(jié)果。Future 的 get()
方法會(huì)返回結(jié)果 (類型為 T )赘艳。
但如果操作并沒有返回值呢酌毡?這種情況下就可以用 Future<Void>
表示。當(dāng)調(diào)用 get()
后結(jié)果計(jì)算完畢則返回后將會(huì)返回 null蕾管。
另外 Void 也用于無值的 Map 中枷踏,例如 Map<T,Void> 這樣 map 將具 Set<T> 有一樣的功能牙捉。
因此當(dāng)你使用泛型時(shí)函數(shù)并不需要返回結(jié)果或某個(gè)對象不需要值時(shí)候這是可以使用 java.lang.Void
類型表示斥赋。
參考:
java.lava.Void 與 void 的比較:
http://stackoverflow.com/questions/10839042/what-is-the-difference-between-java-lang-void-and-void如何判斷函數(shù)返回 void:
http://stackoverflow.com/questions/1924253/how-to-determine-by-reflection-if-a-method-returns-void