java.lang.Void类的解析与使用详解

网友投稿 501 2023-03-04


java.lang.Void类的解析与使用详解

今天在查看源码的时候发现了 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 TYPE = (Class) Class.getPrimitiveClass("void");

/*

* The Void class cannot be instantiated.

*/

private Void() {}

}

从源码中发现该类是final的,不可继承,并且构造是私有的,也不能 new。

那么该类有什么作用呢?

下面是我们先查看下 java.lang.Integer 类的源码

我们都知道 int 的包装类是 java.lang.Integer

从这可以看出 java.lang.Integer 是 int 的包装类。

同理,通过如下 java.lang.Void 的源码可以看出 java.lang.Void 是 void 关键字的包装类。

public static final Class TYPE = (Class) Class.getPrimitiveClass("void");

Void 使用

Void类是一个不可实例化的占位符类,如果方法返回值是Void类型,那么该方法只能返回null类型。

示例如下:

public Void test() {

return null;

}

使用场景一:

Future f = pool.submit(new Callable() {

@Override

public Void call() throws Exception {

......

return null;

}

});

比如使用 Callable接口,该接口必须返回一个值,但实际执行后没有需要返回的数据。 这时可以使用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());

}

}

}

}

执行结果:

main

hello

wait

wait

wait

notify

notifyAll

ps:下面介绍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 TYPE = (Class) 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用来保存结果。Future的get方法会返回结果(类型为T)。

但如果操作并没有返回值呢?这种情况下就可以用Future表示。当调用get后结果计算完毕则返回后将会返回null。

另外Void也用于无值的Map中,例如Map这样map将具Set有一样的功能。

因此当你使用泛型时函数并不需要返回结果或某个对象不需要值时候这是可以使用java.lang.Void类型表示。

总结

以上所述是给大家介绍的java.lang.Void的类 解析与使用详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:api是接口文档(api接口文档管理工具)
下一篇:接口测试怎么设计测试用例(接口测试怎么设计测试用例图)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~