如果方法的返回types是Void,我该返回什么? (不是空的!)
由于在Java中使用generics,我最终不得不实现一个具有Void
作为返回types的函数:
public Void doSomething() { //... }
编译器要求我返回一些东西 。 现在我只是返回null
,但我想知道如果这是好的编码习惯…
我也尝试过Void.class
, void
, Void.TYPE
, new Void()
,根本没有任何回报,但所有这些都不起作用。 (或多或less显而易见的原因)(请参阅此答案的详细信息)
- 那么如果函数的返回types是
Void
我应该返回什么呢? - 什么是
Void
类的一般用法?
编辑:只是为了节省您的downvotes:我问V oid,而不是v oid。 类Void
, 而不是保留关键字void
。
那么,如果函数的返回types必须是
Void
我应该返回什么呢?
使用return null
。 Void
不能被实例化,仅仅是void
Class<T>
types的占位符。
Void
点是什么?
如上所述,这是一个占位符。 例如,如果你使用reflection来查看返回types为void
的方法,那么你将得到的结果是void
。 (从技术上说,你会得到Class<Void>
。它沿着这些线具有其他各种用途,就像你想参数化Callable<T>
。
由于在Java中使用generics,我最终不得不实现这个function
我会说,如果你需要用这个签名来实现一个方法的话,那么你的API可能会有些时髦。 仔细考虑是否有更好的方法去做你想做的事(也许你可以在不同的后续问题中提供更多的细节)。 我有点怀疑,因为这只是“由于使用仿制药”而出现的。
没有办法实例化一个Void,所以你唯一可以返回的是null。
return null
是要走的路。
为了弄清楚为什么你提出的其他build议不起作用:
Void.class
和Void.TYPE
指向相同的对象,types为Class<Void>
,而不是Void
。
这就是为什么你不能返回这些值。 new Void()
将是Void
types,但是该构造函数不存在。 事实上, Void
没有公共的构造函数,所以不能被实例化:除了多态的null
之外,你永远不能拥有任何types为Void
对象。
希望这可以帮助! 🙂
如果由于模糊的原因,你必须使用这种types,那么确实返回null似乎是一个明智的select,因为我想返回值将不会被使用。
编译器会强制你返回一些东西。
而这个类似乎没有公共构造函数,所以新的Void()是不可能的。