Sur*_*ran 7 java generics swing void swingworker
我想创建一个SwingWorker具有最终和中间结果类型的具体类void.我写了以下代码:
class AnswerWorker extends SwingWorker<void, void> {
protected void doInBackGround() {
System.out.println("what is your problem!!");
}
}
Run Code Online (Sandbox Code Playgroud)
这给了我以下错误:
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.
Run Code Online (Sandbox Code Playgroud)
然而,当我将代码更改void为Void(即小v到大写V)时,它工作正常,尽管我仍然被迫return null;在doInBackground()方法结束时.
为什么是这样?我知道Void是一个java.lang包中的类,但是文档没有说太多关于它的内容(至少我不能遵循它:p)
Thanx提前!!
Zhe*_*dar 12
class AnswerWorker extends SwingWorker<Void, Void>
应该做的伎俩.这是因为泛型总是需要对象作为参数.他们也不能采取原始.Void就像一个摆脱这个问题的包装器.
现在你仍然需要返回一些东西的原因:
正如文档所说,Void仍然是一个类.所以你还需要返回一个对象.由于它是不可实现的,因此只有返回的可能性null.所以Void不完全像void关键字.仍然需要返回对象的引用(在这种情况下为null-reference).
有一件重要的事情:泛型强迫你使用对象. void和原始类型一样,不是一个对象.这是Java的纯粹oop性质;)