java.lang.Void類的解析與使用詳解
今天在查看源碼的時候發(fā)現(xiàn)了 java.lang.Void 的類。這個有什么作用呢?
先通過源碼查看下
package java.lang; /** * The {@code Void} class is an uninstantiable placeholder class to hold a * reference to the {@code Class} object representing the Java keyword * void. * * @author unascribed * @since JDK1.1 */ 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() {} }
從源碼中發(fā)現(xiàn)該類是final的,不可繼承,并且構(gòu)造是私有的,也不能 new。
那么該類有什么作用呢?
下面是我們先查看下 java.lang.Integer 類的源碼
我們都知道 int 的包裝類是 java.lang.Integer
從這可以看出 java.lang.Integer 是 int 的包裝類。
同理,通過如下 java.lang.Void 的源碼可以看出 java.lang.Void 是 void 關鍵字的包裝類。
public static final Class<Void> TYPE = (Class<Void>) Class.getPrimitiveClass("void");
Void 使用
Void類是一個不可實例化的占位符類,如果方法返回值是Void類型,那么該方法只能返回null類型。
示例如下:
public Void test() { return null; }
使用場景一:
Future<Void> f = pool.submit(new Callable() { @Override public Void call() throws Exception { ...... return null; } });
比如使用 Callable接口,該接口必須返回一個值,但實際執(zhí)行后沒有需要返回的數(shù)據(jù)。 這時可以使用Void類型作為返回類型。
使用場景二:
通過反射獲取所有返回值為void的方法。
public class Test { public void hello() { } public static void main(String args[]) { for (Method method : Test.class.getMethods()) { if (method.getReturnType().equals(Void.TYPE)) { System.out.println(method.getName()); } } } }
執(zhí)行結(jié)果:
main hello wait wait wait notify notifyAll
ps:下面介紹java.lang.Void 與 void的比較及使用
void關鍵字表示函數(shù)沒有返回結(jié)果,是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作為函數(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)后,某些場景下會用到Void類型。例如Future<T>
用來保存結(jié)果。Future的get方法會返回結(jié)果(類型為T)。
但如果操作并沒有返回值呢?這種情況下就可以用Future<Void>
表示。當調(diào)用get后結(jié)果計算完畢則返回后將會返回null。
另外Void也用于無值的Map中,例如Map<T,Void>
這樣map將具Set<T>
有一樣的功能。
因此當你使用泛型時函數(shù)并不需要返回結(jié)果或某個對象不需要值時候這是可以使用java.lang.Void類型表示。
總結(jié)
以上所述是小編給大家介紹的java.lang.Void的類 解析與使用詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關文章
詳解Java使用Jsch與sftp服務器實現(xiàn)ssh免密登錄
這篇文章主要介紹了詳解Java使用Jsch與sftp服務器實現(xiàn)ssh免密登錄,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-10-10springboot實現(xiàn)定時器(一看即會,非常簡單)
這篇文章主要介紹了springboot實現(xiàn)定時器(一看即會,非常簡單),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12Spring Boot中RabbitMQ自動配置的介紹、原理和使用方法
本文介紹了Spring Boot中RabbitMQ自動配置的介紹、原理和使用方法,通過本文的介紹,我們希望讀者能夠更好地理解Spring Boot中RabbitMQ的使用方法,并在項目中更加靈活地應用,感興趣的朋友跟隨小編一起看看吧2023-07-07JVM內(nèi)存管理之JAVA語言的內(nèi)存管理詳解
下面小編就為大家?guī)硪黄狫VM內(nèi)存管理之JAVA語言的內(nèi)存管理詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-08Java開發(fā)之Spring連接數(shù)據(jù)庫方法實例分析
這篇文章主要介紹了Java開發(fā)之Spring連接數(shù)據(jù)庫方法,以實例形式較為詳細的分析了Java Spring開發(fā)中針對數(shù)據(jù)庫的相關操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-10-10