如果方法的返回类型是 Void,我应该返回啥? (不是无效的!)
Posted
技术标签:
【中文标题】如果方法的返回类型是 Void,我应该返回啥? (不是无效的!)【英文标题】:What do I return if the return type of a method is Void? (Not void!)如果方法的返回类型是 Void,我应该返回什么? (不是无效的!) 【发布时间】:2010-10-15 04:03:09 【问题描述】:由于在 Java 中使用泛型,我最终不得不实现一个返回类型为 Void
的函数:
public Void doSomething()
//...
并且编译器要求我返回 something。现在我只是返回null
,但我想知道这是否是一种好的编码习惯......
我问的是 Void,而不是 void。类Void
,不是保留关键字void
。
我也试过Void.class
、void
、Void.TYPE
、new Void()
,完全没有回报,但所有这些都不起作用。 (出于或多或少显而易见的原因)(详见this answer)
Void
,我应该返回什么?
Void
类的一般用途是什么?
【问题讨论】:
【参考方案1】:就这样。
public Class TestClass
public void testMethod ()
return;
【讨论】:
OP 说的是Void
,而不是void
。其他答案似乎已经很好地涵盖了这个主题。【参考方案2】:
如果函数的返回类型必须是
Void
,我应该返回什么?
使用return null
。 Void
不能被实例化,它只是 Class<T>
类型的 void
的占位符。
Void
有什么意义?
如上所述,它是一个占位符。 Void
是您将得到的结果,例如,如果您使用反射查看返回类型为 void
的方法。 (从技术上讲,你会得到Class<Void>
。)它还有其他各种用途,比如你想参数化Callable<T>
。
由于在 Java 中使用了泛型,我最终不得不实现这个功能
如果您需要实现具有此签名的方法,我会说您的 API 可能有些古怪。仔细考虑是否有更好的方法来做你想做的事(也许你可以在不同的后续问题中提供更多细节?)。我有点怀疑,因为这只是“由于使用泛型”而出现的。
【讨论】:
不得不返回 Void 并不是那么时髦。它可以简单地由例如可调用要弄清楚为什么您提供的其他建议不起作用:
Void.class
和 Void.TYPE
指向同一个对象,并且是 Class<Void>
类型,而不是 Void
。
这就是您无法返回这些值的原因。 new Void()
将是 Void
类型,但该构造函数不存在。事实上,Void
没有公共构造函数,因此无法实例化:除了多态 null
之外,您永远不能拥有任何类型为 Void
的对象。
希望这会有所帮助! :-)
【讨论】:
小修正:Void.TYPE
不指向Void.class
。它指向void.class
。【参考方案4】:
没有办法实例化 Void,所以您可以返回的唯一内容是 null。
【讨论】:
更准确地说,没有做坏事就没有办法实例化一个虚空。【参考方案5】:如果出于不明原因,您必须使用这种类型,那么返回 null 似乎是一个明智的选择,因为我认为无论如何都不会使用返回值。 无论如何,编译器都会强制你返回一些东西。 而且这个类似乎没有公共构造函数,所以 new Void() 是不可能的。
【讨论】:
我不是必须的;这只是惯例。【参考方案6】:return null
是要走的路。
【讨论】:
以上是关于如果方法的返回类型是 Void,我应该返回啥? (不是无效的!)的主要内容,如果未能解决你的问题,请参考以下文章