Java泛型void / Void类型

时间:2011-04-06 14:53:35

标签: java void return-type

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

new ResponseHandler<int>() {
    public int handleResponse(...) {
        // ... code ...
        return 0;
    }
}

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

new ResponseHandler<void>() {
        public void handleResponse(...) {
            // ... code ...
        }
}

我想我可以用void替换Void来返回Void个对象,但这不是我想要的。 问题:是否可以通过voidhandleResponse返回{{1}}来组织此回调情况?

6 个答案:

答案 0 :(得分:76)

为此确切情况创建了Void类型:创建一个具有泛型返回类型的方法,其中子类型可以是“void”。 Void的设计方式使得不可能创建该类型的对象。因此,类型Void的方法将始终返回null(或异常完成),这与您将要获得的一样接近于零。你必须在方法中放置return null,但这只会是一个小小的不便。

简而言之:请使用Void

答案 1 :(得分:49)

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

您能说出为什么不想使用Void吗?

答案 2 :(得分:4)

当您需要返回php_value upload_max_filesize 100M php_value post_max_size 100M 时,只需返回java.lang.Void

答案 3 :(得分:1)

您不能在泛型中使用原语,因此int实际上是integer。对象Void类似于泛型的关键字void

答案 4 :(得分:1)

唉,这是不可能的。你可以设置代码返回Void,但是你永远不能实现Void,所以你实际上不能写一个符合本规范的功能。

将其视为:泛型函数说“此函数返回X类型的东西”,您可以指定X但不能将句子更改为“此函数不返回任何内容”。 (我不确定我是否同意这些语义,但这就是它们的方式。)

在这种情况下,我总是这样做,只是让函数返回类型Object,实际上总是返回null

答案 5 :(得分:-1)

这种Java中的java.lang.Void实现说明了一切。另外,我写了一篇文章,将其与泛型联系起来。在我开始理解这个问题之前,我花了一些心思:http://www.siteconsortium.com/h/D00006.php。注意TYPE = Class.getPrimitiveClass(“void”);

package java.lang;

public final class Void {

    public static final Class<Void> TYPE = Class.getPrimitiveClass("void");

    private Void() {}
}