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

问题描述 投票:111回答:6

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

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

并且编译器要求我返回一些东西。现在我只是回到null,但我想知道这是不是很好的编码练习......

我问的是虚空,而不是虚空。类Void,而不是保留关键字void

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

  • 那么如果函数的返回类型是Void,我应该返回什么?
  • 什么是Void类的一般用途?
java generics void
6个回答
103
投票

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

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

Void有什么意义?

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

由于在Java中使用泛型,我最终必须实现此功能

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


25
投票

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


20
投票

return null是要走的路。


20
投票

要弄清楚为什么你给出的其他建议不起作用:

Void.classVoid.TYPE指向同一个物体,属于Class<Void>,而不是Void

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

希望这可以帮助! :-)


0
投票

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


-1
投票

像这样。

public Class TestClass {
    public void testMethod () {
        return;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.