java.lang.Void 解析与使用

2021/02/15

本文主要介绍了 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<Void> TYPE = (Class<Void>) Class.getPrimitiveClass("void");

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

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

从源码可以看出 java.lang.Void 是 void 关键字的包装类。

java.lang.Void 使用

使用场景一

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

比如使用 Callable 接口,该接口必须返回一个值,但实际执行后没有需要返回的数据。这时可以使用 Void 类型作为返回类型。

Future<Void> f = pool.submit(new Callable() {

    @Override
    public Void call() throws Exception {
        ......
        return null;
    }
});

使用场景二

通过反射获取所有返回值为 void 的方法。

public class Test {
    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

参考

https://www.jb51.net/article/131118.htm

Post Directory