跳转至

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.classVoid.TYPE 是同一个对象。
  • Void 不能 new,也不能继承(final)。
  • 写泛型 Callable<Void> 时,return 必须是 null,不能写 return;