Void 和 no parameter 有什么区别?

2022-08-31 14:56:39

我有一个类,它定义了两个重载方法

public void handle(Void e) 

protected void handle() 

显然他们是不同的,特别是.handle(Void e)public


这两者之间有什么区别?

如何调用第一种方法?我正在使用 - 这是正确的吗?handle(null)


答案 1

Void是一个特殊类,通常仅用于反射 - 它的主要用途是表示 void 方法的返回类型。来自 Javadoc for Void

Void 类是一个无法证实的占位符类,用于保存对表示 Java 关键字 void 的 Class 对象的引用。

由于无法实例化该类,因此可以传递给具有类型参数的方法(如 )的唯一值是 。VoidVoidhandle(Void e)null


这是事件的官方版本,但对于那些感兴趣的人,尽管在 javadoc 中声称相反,您实际上可以实例化:VoidVoid

Constructor<Void> c = Void.class.getDeclaredConstructor();
c.setAccessible(true);
Void v = c.newInstance(); // Hello sailor!


也就是说,当您想要指示类型被“忽略”时,我已经看到“有用地”用作泛型参数类型,例如:Void

Callable<Void> ignoreResult = new Callable<Void> () {
    public Void call() throws Exception {
        // do something
        return null; // only possible value for a Void type
    }
}

Callable的泛型参数是返回类型,因此当像这样使用时,即使需要使用接口,例如,如果使用框架,它也会向代码的读者发出一个明确的信号,即返回的值并不重要。VoidCallableExecutor


答案 2

第一个函数是单个参数的函数,必须提供该参数并且只能有效地取值 。除 null 以外的任何值都不会编译。第二个函数不采用任何参数,传递给它也不会编译。nullnull