如果方法的返回类型为Void,我会返回什么? (不是无效!)

时间:2009-03-24 09:31:55

标签: java generics void

由于在Java中使用了Generics,我最终必须实现一个以Void作为返回类型的函数:

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

并且编译器要求我返回某些内容。现在我只是回归null,但我想知道这是不是很好的编码实践......

我问的是 V oid,而不是 v oid。班级Void保留关键字void

我还尝试了Void.classvoidVoid.TYPEnew Void(),根本没有回复,但所有这些都根本不起作用。 (出于或多或少的明显原因)(详见this answer

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

6 个答案:

答案 0 :(得分:102)

  

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

使用return nullVoid无法实例化,仅仅是Class<T>类型void的占位符。

  

Void有什么意义?

如上所述,它是一个占位符。例如,如果您使用反射来查看返回类型为Void的方法,那么void就会得到回报。 (从技术上讲,你会回来Class<Void>。)它在这些行中有其他各种用途,例如,如果你想参数化Callable<T>

  

由于在Java中使用了泛型,我最终不得不实现这个功能

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

答案 1 :(得分:24)

无法实例化Void,因此 返回的唯一内容为null。

答案 2 :(得分:19)

return null是要走的路。

答案 3 :(得分:19)

要明确为什么您提供的其他建议不起作用:

Void.classVoid.TYPE指向同一个对象,类型为Class<Void>,而不是Void

这就是为什么你不能返回这些值。 new Void()类型为Void但该构造函数不存在。实际上,Void没有公共构造函数,因此无法实例化:除了多态Void之外,您永远不能拥有null类型的任何对象。

希望这有帮助! : - )

答案 4 :(得分:0)

如果由于晦涩的原因,你必须使用这种类型,那么确实返回null似乎是一个明智的选择,因为我认为无论如何都不会使用返回值。
无论如何编译器会强制你返回一些东西 而且这个类似乎没有公共构造函数,所以新的Void()是不可能的。

答案 5 :(得分:-1)

就是这样

POST /topics/(string: topic_name)