gpt4 book ai didi

java - Void 和无参数有什么区别?

转载 作者:IT老高 更新时间:2023-10-28 20:21:51 29 4
gpt4 key购买 nike

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

public void handle(Void e) 

protected void handle()

显然它们是不同的,尤其是 handle(Void e)public


这两者有什么区别?

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

最佳答案

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

The Void class is an uninstantiable placeholder class to hold a reference to the Class object representing the Java keyword void.

因为Void类不能被实例化,所以唯一可以传递给带有Void类型参数的方法的值,比如handle(Void e ),是null


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

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 的泛型参数是返回类型,所以当 Void 像这样使用时,向代码的读者清楚地表明返回的值不是重要的是,即使需要使用 Callable 接口(interface),例如如果使用 Executor 框架。

关于java - Void 和无参数有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14030337/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com