Javagenericsvoid / Voidtypes
我正在为Apache HttpClient包实现ResponseHandler ,如下所示: 
 new ResponseHandler<int>() { public int handleResponse(...) { // ... code ... return 0; } } 
 但我想为handleResponse函数返回什么,即void 。 这可能吗? 以下不编译,因为void不是一个有效的Javatypes: 
 new ResponseHandler<void>() { public void handleResponse(...) { // ... code ... } } 
 我想我可以用voidreplacevoid来返回一个Void对象,但是这不是我想要的。  问 :是否有可能组织这种callback情况,使我可以返回void handleResponse ? 
generics只处理对象类。 无效和原始types不被generics支持,并且不能将这些用作参数化types。 你必须改用Void。
 你能说为什么你不想使用Void ? 
  Voidtypes是为了这个确切的情况而创build的:创build一个带有generics返回types的方法,其中子types可以是“void”。  Voiddevise方式是不能创build这种types的对象。 因此,一个types为Void的方法将总是返回null (或者exception完成),这与您将要获得的内容几乎没有任何关系。 你必须在方法中return null ,但这只是一个小小的不便。 
 总之:使用Void 。 
当你需要返回java.lang.Void时,只需返回null。
  唉,这是不可能的。 你可以设置代码返回Void ,但是你永远不能实例化一个Void所以你不能写一个符合这个规范的函数。 
把它想象为:generics函数说“这个函数返回Xtypes的东西”,你可以指定X,但是你不能把句子改成“这个函数什么都不返回”。 (我不确定是否同意这些语义,但这是他们的方式。)
 在这种情况下,我总是这样做,只是使函数返回typesObject ,实际上总是返回null 。 
 generics中不能有原语,所以int实际上是一个integer 。 对象Void与generics的关键字void类似。 
Java中的这种java.lang.Void实现有其自身的意义。 另外,我写了一篇文章,把它和generics联系起来。 在开始理解这个之前,我花了一些心思: http : //www.siteconsortium.com/h/D00006.php 。 注意TYPE = Class.getPrimitiveClass(“void”);
软件包java.lang;
 public final class Void { public static final Class<Void> TYPE = Class.getPrimitiveClass("void"); private Void() {} }