118

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

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

并且编译器要求我返回一些东西。现在我刚回来null,但我想知道这是否是好的编码习惯......

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

我也试过Void.class, void, Void.TYPE, new Void(), 根本没有回报,但所有这些都不起作用。(出于或多或少明显的原因)(有关详细信息,请参阅此答案

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

6 回答 6

106

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

使用return null. Void不能被实例化,只是.Class<T>类型的占位符void

有什么意义Void

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

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

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

于 2009-03-24T09:38:59.100 回答
26

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

于 2009-03-24T09:39:35.557 回答
21

return null是要走的路。

于 2009-03-24T09:36:44.770 回答
21

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

Void.class并且Void.TYPE指向同一个对象并且是类型Class<Void>,而不是Void

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

希望这可以帮助!:-)

于 2009-05-19T07:10:02.983 回答
1

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

于 2009-03-24T09:38:19.867 回答
-3

像这样。

public Class TestClass {
    public void testMethod () {
        return;
    }
}
于 2019-03-07T04:20:40.400 回答