首页 文章

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

提问于
浏览
111

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

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

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

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

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

  • Void 类的一般用法是什么?

EDIT: 只是为了免除你的支持:我问的是 V oid,而不是 v oid . 类 Voidnot 保留关键字 void .

5 回答

  • 0

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

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

    Void有什么意义?

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

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

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

  • 24

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

  • 18

    return null 是要走的路 .

  • 19

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

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

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

    希望这可以帮助! :-)

  • 102

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

相关问题