java - 将 SwingWorker 的通用类型设置为 void?

标签 java swing generics void swingworker

<分区>

Possible Duplicate:
What is the difference between java.lang.Void and void?

我想为 SwingWorker 创建一个具体类,最终和中间结果类型都为 void。我写了下面的代码:

class AnswerWorker extends SwingWorker<void, void> {
    protected void doInBackGround() {
        System.out.println("what is your problem!!");
    }
}

这给了我以下错误:

Multiple markers at this line-
    Syntax error on token "void", Dimensions expected after this token.
    Syntax error on token "void", Dimensions expected after this token.

然而,当我将代码从 void 更改为 Void(即小 v 为大写 V)时,它工作正常,尽管我仍然被迫 return null;doInBackground() 方法的末尾。

这是为什么?我知道 Voidjava.lang 包中的一个类,但文档并没有说明太多(至少不是我可以遵循的:p)

提前致谢!

最佳答案

class AnswerWorker extends SwingWorker<Void, Void>
应该做的伎俩。 那是因为泛型总是需要对象作为参数。他们也不能接受原语。 Void就像一个包装器来解决这个问题。

现在你仍然需要返回一些东西的原因:
如文档所述,Void仍然是一个类。所以你仍然需要返回一个对象。因为它是不可实例化的,所以只有返回 null 的可能性。 .所以Void不完全像 void关键词。仍然需要返回对对象的引用(在本例中为空引用)。

有一件重要的事情:泛型迫使您使用对象。 void和原始类型一样,不是对象。这就是 Java 的纯 oop 本质;)

关于java - 将 SwingWorker 的通用类型设置为 void?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14219710/

相关文章:

java - SimpleAdapter 不起作用

java - 如何在不卡住我的应用程序的情况下运行循环?

java - 在 Java Swing 中,如何管理允许选择多个面板的面板列表?

java - 如何将 Java Swing 应用程序实现到触摸屏

java - 如何以通用方式访问 Java 构造函数?

java - 使用 MockWebServiceServer 测试 Web 服务客户端 : sequence of requests

java - Android更改开关图片

java - 使用JAVA进行流程管理

generics - Kotlin中泛型的子类型问题

Java 泛型,<C> 是否等于 <T>?