在API中
"Void类是一个不可实例化的占位符类,用于保存对表示Java关键字void的Class对象的引用."
java.lang.Void
使用?如果该类是"不可实现的",它有什么用?java.lang.Void
和之间有什么区别void
?Quu*_*one 97
java.lang.Void
类似于java.lang.Integer
.Integer
是一种拳击原始类型值的方法int
.Void
是一种拳击原始类型值的方法void
.
"但等等,void
没有任何可能的价值!"
对!这就是java.lang.Void
"无法实现"的原因.:)
这是Java类型系统的一个很好的特性,每个基本类型都有一个盒装等价物.int
有Integer
,long
有Long
,byte
有Byte
......和void
有Void
.如果Void
不存在,那将是奇怪的和不对称的.
"那么java.lang.Void
和之间的区别是void
什么?"
简单.void
是一种原始类型.Void
是继承自的引用类型Object
.它们的相似之处在于它们都没有任何可能的价值; 但从类型系统的角度来看,它们是两种截然不同的类型.
"但我Void
在我的课程中没有任何用处."
而我GarbageCollectorMXBean
在我的用处并没有任何用处.有些功能不具有非晦涩的用途.没关系.
Jav*_*ier 54
最常见的用途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
操作. When
会在删除完成后返回将来的get()is invoked on that future,
null` .人们可以用Callable s 写一个类似的例子.
另一个用例是Map
没有值,即a Map<T,Void>
.这样的映射表现得像a Set<T>
,那么当没有等效的实现时Set
(例如,没有WeakHashSet
,那么可以使用a WeakHashMap<T,Void>
)它可能是有用的.
Lou*_*man 52
在唯一的一点的Void
是持有Void.TYPE
,这是有点像void.class
.如果你有一个返回的方法的反射引用void
,并且你得到它的返回类型,它将返回Void.TYPE
.
你不能也不应该将它用于其他任何事情.
Void是一个AutoBoxing功能(自JDK 1.5起)的void.
它的自我解释是Void是参考,而void是原始类型.
那么,要求必须使用Void ???
Generic类型的一个常见用法,我们不能使用原语.
比方说,
AsyncTaks<Params, Progress, Result>
如果我不想获得Progress更新,那么Android会怎样.我不能在这里使用void(原始类型)我们需要java.lang.Void
归档时间: |
|
查看次数: |
26221 次 |
最近记录: |