java.lang.Void

void

void 不是函数,是方法的修饰符,void 的意思是该方法没有任何返回值,意思就是方法只会运行方法中的语句,但是不会返回任何东西。

Void

源码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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.
* Void 类是一个不可实例化的占位符类,它持有对标识 Java 关键字 void 的 Class 对象的引用。
*
* @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() {}
}

通过源码可以看出 java.lang.Void 是一种类型,Void 不可以继承与实例化。

Void 作为函数的返回结果表示函数返回 null(除了 null 不能返回其它类型)。

1
2
3
4
Void function(int a, int b) {
// do something
return null;
}

泛型出现前,Void 一般用于反射中。例如,下面代码打印返回类型为 void 的方法名。

1
2
3
4
5
6
7
8
9
10
public void VoidTest {
public void print(String v) {}
public static void main(String[] args) {
for (Method method : VoidTest.class.getMethods()) {
if (method.getReturnType().equals(Void.TYPE)) {
System.out.println(method.getName());
}
}
}
}

泛型出现后,某些场景会用到 Void 类型。例如 Future 用来保存结果。Future 的 get 方法会返回结果(类型为 T。
但如果操作并没有返回值,这种情况下就可以用 Future 表示。当调用 get 后结果计算完毕则返回后将会返回 null。
另外 Void 也用于无值的 Map 中,例如 Map<T, Void> 这样 map 将具有 Set 一样的功能。

因此当使用范型时函数不需要返回结果或对象不需要值的时候可以使用 java.lang.Void 类型表示。(Void 类可能本身作用就是不起任何作用,但是本身只是一个占位符类。即 Void 类本身只是一个占位符类,不能被实例化,多用于泛型中作占位符使用)

本文结束啦 感谢您阅读
如果你觉得这篇文章对你有用,欢迎赞赏哦~
0%