Java 如果方法的返回类型为Void,我应该返回什么?(并非无效!)

Java 如果方法的返回类型为Void,我应该返回什么?(并非无效!),java,generics,void,Java,Generics,Void,由于在Java中使用泛型,我最终不得不实现一个返回类型为Void的函数: public Void doSomething() { //... } 编译器要求我返回一些东西。现在我只返回null,但我想知道这是否是一个好的编码实践 我问的是V‌oid,非v‌奥德。类Void,not保留关键字Void 我还尝试了Void.class,Void,Void.TYPE,new Void(),完全没有返回,但所有这些都不起作用。(出于或多或少明显的原因)(详情请参阅) 那么,如果函数的返回类型是

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

public Void doSomething() {
    //...
}
编译器要求我返回一些东西。现在我只返回
null
,但我想知道这是否是一个好的编码实践

我问的是V‌oid,非v‌奥德。类
Void
not保留关键字
Void

我还尝试了
Void.class
Void
Void.TYPE
new Void()
,完全没有返回,但所有这些都不起作用。(出于或多或少明显的原因)(详情请参阅)

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

返回null
是一种方法。

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

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

使用
返回null
Void
无法实例化,它只是
Void
类型的占位符

Void
有什么意义

如上所述,它是一个占位符<例如,如果使用反射查看返回类型为
Void
的方法,您将得到code>Void。(从技术上讲,你会得到
)它还有其他类似的用途,比如如果你想参数化一个
可调用的

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


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

无法实例化一个Void,所以您只能返回null。

要明确您给出的其他建议不起作用的原因:

Void.class
Void.TYPE
指向同一对象,属于
class
类型,而不是
Void

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

希望这有帮助!:-)

就这样

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

毕竟,必须回到虚空并不那么令人讨厌。它可以简单地由例如Callable强制执行。有时您不需要返回某些内容,但无法使用,例如Runnable。正如我所指出的,Void具有合法的用途。但他说,“这只是由于使用了仿制药”。这听起来像是他对一个需要使用Void的集合做了些什么,我认为这是一个相当特殊的情况。对于集合来说,这确实很奇怪。Void.class和Void.class都是类,但它们并不相等。Void通常用作Map值(或使用Collections.newSetFromMap)和AccessController.doPrivileged的返回中的泛型参数。@Tom:Yeppers。这就是为什么我给这个部分加上了标签(从技术上讲,你会回来的。)“我应该修改那个部分吗,或者你认为它是准确的吗?我不是必须的;这只是惯例。更准确地说,如果不做坏事,就无法实例化一个Void。次要更正:
Void.TYPE
不指向
Void.class
。它指向
void.class
。OP说的是
void
,而不是
void
。其他答案似乎已经很好地涵盖了这个主题。