这篇文章将为大家详细讲解有关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() {} }
从源码中发现该类是final的,不可继承,并且构造是私有的,也不能 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接口,该接口必须返回一个值,但实际执行后没有需要返回的数据。 这时可以使用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<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类型表示。
关于“java.lang.Void类有什么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。