如果方法的返回类型是 Void,我应该返回什么? (不是 Void!)

由于使用了 Java的类型擦除,我不得不实现一个函数,返回类型为 Void:

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

编译器要求我返回 什么的。现在我只是返回 null,但我想知道,如果这是良好的编码实践..。

我问的是关于 V的,不是 翻译的。类 Void没有的保留关键字 void

I've also tried Void.class, void, Void.TYPE, new Void(), no return at all, but all that doesn't work at all. (For more or less obvious reasons) (See 这个答案 for details)

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

return null是正确的选择。

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

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

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

Void的意义是什么?

如上所述,这是一个占位符。例如,如果使用反射查看返回类型为 void的方法,则返回的结果是 Void。(从技术上讲,你会得到 Class<Void>。)它沿着这些方向还有其他各种各样的用途,例如,如果您想要参数化 Callable<T>

由于使用了 Java的类型擦除,我最终不得不实现这个函数

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

无法实例化 Void,所以 可以返回的唯一值是 null。

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

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

That is why you can't return those values. new Void() would be of type Void but that constructor doesn't exist. In fact, Void has no public constructors and so cannot be instantiated: You can never have any object of type Void except for the polymorphic null.

Hope this helps! :-)

just like this.

public Class TestClass {
public void testMethod () {
return;
}
}