如果方法的返回types是Void,我该返回什么? (不是空的!)

由于在Java中使用generics,我最终不得不实现一个具有Void作为返回types的函数:

 public Void doSomething() { //... } 

编译器要求我返回一些东西 。 现在我只是返回null ,但我想知道如果这是好的编码习惯…

我也尝试过Void.classvoidVoid.TYPEnew Void() ,根本没有任何回报,但所有这些都不起作用。 (或多或less显而易见的原因)(请参阅此答案的详细信息)

  • 那么如果函数的返回types是Void我应该返回什么呢?
  • 什么是Void类的一般用法?

编辑:只是为了节省您的downvotes:我问V oid,而不是v oid。 类Void而不是保留关键字void

那么,如果函数的返回types必须是Void我应该返回什么呢?

使用return nullVoid不能被实例化,仅仅是void Class<T>types的占位符。

Void点是什么?

如上所述,这是一个占位符。 例如,如果你使用reflection来查看返回types为void的方法,那么你将得到的结果是void 。 (从技术上说,你会得到Class<Void> 。它沿着这些线具有其他各种用途,就像你想参数化Callable<T>

由于在Java中使用generics,我最终不得不实现这个function

我会说,如果你需要用这个签名来实现一个方法的话,那么你的API可能会有些时髦。 仔细考虑是否有更好的方法去做你想做的事(也许你可以在不同的后续问题中提供更多的细节)。 我有点怀疑,因为这只是“由于使用仿制药”而出现的。

没有办法实例化一个Void,所以你唯一可以返回的是null。

return null是要走的路。

为了弄清楚为什么你提出的其他build议不起作用:

Void.classVoid.TYPE指向相同的对象,types为Class<Void> ,而不是Void

这就是为什么你不能返回这些值。 new Void()将是Voidtypes,但是该构造函数不存在。 事实上, Void没有公共的构造函数,所以不能被实例化:除了多态的null之外,你永远不能拥有任何types为Void对象。

希望这可以帮助! 🙂

如果由于模糊的原因,你必须使用这种types,那么确实返回null似乎是一个明智的select,因为我想返回值将不会被使用。
编译器会强制你返回一些东西。
而这个类似乎没有公共构造函数,所以新的Void()是不可能的。