Jos*_*osh 16 java null android void
究竟是什么区别Void,void和我可以只使用null呢?
我问这是因为我正在查看示例Android代码,他们使用Void但是它上面有Eclipse错误(它说Void cannot be resolved to a variable).
我破解的代码是
public class MyAsyncTask extends AsyncTask<Void, Void, Boolean>{
...
}
Run Code Online (Sandbox Code Playgroud)
我这样用它
MyAsyncTask myAsyncTask = new MyAsyncTask();
myAsyncTask.execute((Void),null);//this is the line that breaks "Void cannot be resolved to a variable"
Run Code Online (Sandbox Code Playgroud)
Jav*_*ier 53
最常见的用途Void是用于反射,但这不是唯一可以使用它的地方.
void 是一个关键字,表示函数不会产生值.
java.lang.Void 是一个引用类型,然后以下是有效的:
Void nil = null;
Run Code Online (Sandbox Code Playgroud)
(到目前为止它并不有趣......)
作为结果类型(具有类型的返回值Void的函数),这意味着函数*总是*返回null(它不能返回除了之外的任何内容null,因为Void没有实例).
Void function(int a, int b) {
//do something
return null;
}
Run Code Online (Sandbox Code Playgroud)
为什么我喜欢一个总是返回null 的函数?
在发明泛型之前,我没有用例Void.
有了泛型,有一些有趣的案例.例如,a Future<T>是由其他线程执行的异步操作的结果的持有者.Future.get将返回操作值(类型T),并将阻塞直到执行计算.
但是......如果没有什么可以回来怎么办?简单:用一个Future<Void>.例如,在Google App Engine中,Asyncronous Datastore Service delete操作返回a Future<Void>.如果get()在未来被调用时,null返回后的删除完成.人们可以用Callable s 写一个类似的例子.
另一个用例是Map没有值,即a Map<T,Void>.这样的映射表现得像a Set<T>,那么当没有等效的实现时Set(例如,没有WeakHashSet,那么可以使用a WeakHashMap<T,Void>)它可能是有用的.
您的代码中多了一个逗号。
myAsyncTask.execute((Void),null);
//^extra comma right here
Run Code Online (Sandbox Code Playgroud)
另外,不需要强制转换null为Void,因为 (1)Void没有实例,因此没有Void对象,并且 (2) 强制转换null为任何内容都是毫无用处的,因为 null 是任何对象数据类型的有效值。
代码可能应该是:
myAsyncTask.execute(null);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12317 次 |
| 最近记录: |