java.lang.Void 和 void 的作用与区别?¶
结论¶
void |
java.lang.Void |
|
|---|---|---|
| 类型 | 关键字 | 类(final,不可实例化) |
| 含义 | 表示"无返回值" | 对 void 关键字的类型层面的占位符 |
| 用途 | 方法返回值声明 | 反射、泛型、Callable 等需要"类型"的场景 |
void 的作用¶
- 用于方法签名,表示该方法没有返回值:
public void run() {}。 - 它不是引用类型,也不是基本类型,不能声明变量。
Void 的作用¶
Void 类的源码几乎是空的,唯一作用就是在需要"类型"的地方代表 void:
public final class Void {
public static final Class<Void> TYPE =
Class.getPrimitiveClass("void");
private Void() {} // 禁止实例化
}
典型使用场景:
1. 反射获取方法返回值类型¶
Method m = Foo.class.getMethod("run");
if (m.getReturnType() == void.class) { ... }
// Void.TYPE 等价于 void.class
if (m.getReturnType() == Void.TYPE) { ... }
2. 泛型场景表示"不返回数据"¶
// Callable 必须返回一个泛型类型,用 Void 表示"无结果"
Callable<Void> task = () -> {
doSomething();
return null; // 必须 return null
};
// Future<Void> 表示执行完即可,不关心结果
Future<Void> f = executor.submit(task);
f.get();
易混点
void.class和Void.TYPE是同一个对象。Void不能 new,也不能继承(final)。- 写泛型
Callable<Void>时,return 必须是null,不能写return;。