Java泛型void/Void类型

Tra*_*ebb 69 java return-type void

我正在ResponseHandler为apache HttpClient包实现一个,如下所示:

new ResponseHandler<int>() {
    public int handleResponse(...) {
        // ... code ...
        return 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

但我希望handleResponse函数不返回任何东西,即void.这可能吗?以下内容无法编译,因为void它不是有效的Java类型:

new ResponseHandler<void>() {
        public void handleResponse(...) {
            // ... code ...
        }
}
Run Code Online (Sandbox Code Playgroud)

我想我可以代替voidVoid返回一个Void对象,但是这并不是我真正想要的东西.:是否有可能组织这次回调的情况以这样的方式,我可以返回voidhandleResponse

ILM*_*tan 83

Void类型是为这个确切的情况下创建:创建方法与通用返回类型,其中一个子类型可以是"无效的".Void设计的方式是不可能创建那种类型的对象.因此,类型的方法Void将始终返回null(或异常完成),这与您将要获得的一样接近于零.你必须加入return null方法,但这只会是一个小小的不便.

简而言之:使用Void.

  • +1澄清一下,自从JDK1.1以来,Void已经存在.它最初是为与Reflection一起使用而创建的,但在泛型中具有类似的作用. (5认同)
  • 啊——泛型的痛苦在于,如果你定义了“Void”的返回类型,那么你必须放入“return(null);” 声明 void 返回类型的主要原因是这样您就不必有 return 语句,并且可以使用现有的“void”方法:) Java 泛型的部分问题是运行时类型检查的合并需要编译时代码生成和“bookeeping”帮助。人们需要“宏”和“模板”来为在*语言*方面编写代码提供便利。 (3认同)

Pet*_*rey 55

泛型只处理对象类.泛型不支持void和原始类型,您不能将它们用作参数化类型.你必须使用Void.

你能说为什么不想用Void

  • +1提醒我"计算机科学中的任何问题都可以通过添加一层间接来解决" (45认同)
  • 你可以创建一个抽象包装器,它调用你的`void`方法并返回`null`来隐藏这个丑陋. (8认同)
  • 我只是不想在一个我没有返回任何东西的函数中包含一个`return`语句,主要是为了清洁. (7认同)

小智 11

当您需要返回时java.lang.Void,只需返回即可null