在API
“Void类是一个不可实例化占位符类保持于表示Java关键字空隙类对象的引用。”
- 什么是“不可实例”占位符类? 当将
java.lang.Void
使用? 如果类是“不可实例”,有什么用呢? - 有什么区别
java.lang.Void
和void
?
在API
“Void类是一个不可实例化占位符类保持于表示Java关键字空隙类对象的引用。”
java.lang.Void
使用? 如果类是“不可实例”,有什么用呢? java.lang.Void
和void
? 唯一的一点 Void
是持有Void.TYPE
,这是有点像void.class
。 如果你有一个返回方法反射参考void
,你会得到它的返回类型,它会返回Void.TYPE
。
你不能,也不应该用它做别的事情。
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
矿井。 有些功能不无晦涩的用途。 没关系。
最常见的用途Void
是反思,但不是唯一的地方可以使用的地方。
void
是指一个函数不会导致一个值的关键字。
java.lang.Void
是引用类型,则以下是有效的:
Void nil = null;
(到目前为止,这是不感兴趣......)
结果型(类型的返回值的函数Void
)这意味着功能*总是*返回null
(它不能返回以外的任何null
,因为Void
没有实例)。
Void function(int a, int b) {
//do something
return null;
}
为什么我想它总是返回空值的函数?
仿制药的发明之前,我没有对用例Void
。
随着仿制药,也有一些有趣的情况。 例如, Future<T>
是用于由另一个线程执行异步操作的结果的保持器。 Future.get
将返回(的类型的操作值T
),并且将阻塞,直到被执行的计算。
但是...如果有什么要什么回报? 很简单:用一个Future<Void>
。 例如,在谷歌应用程序引擎的Asyncronous数据存储服务delete
操作返回未来. When
. When
get()方法is invoked on that future,
删除完成后返回null`。 一个可以写一个类似的例子可赎回秒。
另一种使用情况是一个Map
没有值,即一个Map<T,Void>
。 这样的地图的行为类似于Set<T>
那么它可能在没有等效实施是有用的Set
(例如,没有WeakHashSet
,然后人们可以使用WeakHashMap<T,Void>
)。
空隙是一个自动装箱特征(自JDK 1.5)的空隙。
以及它的自解释性的该空隙参考而空隙是基本类型。
所以,当需求出现不得不使用太虚???
与泛型类型,我们不能用原始的一种常见的用法。
也就是说,在Android的情况下
AsyncTaks<Params, Progress, Result>
如果我不希望得到的最新进展是什么。 我不能使用无效(基本型),在这里我们需要java.lang.Void的
用于使用另一示例Void
是SwingWorker
new SwingWorker<Void, Integer> () {
@Override
protected Void doInBackground(){
...
}
@Override
protected void process(List<Integer> chunk){
...
}
@Override
public void done(){
...
}
}.execute();
因为有时你需要指定方法本身之外的方法的返回类型为void是非常有用的。
例如借此的java 8 lambda表达式 ,检查一个EventResource对象是否具有某些特性,使用一种称为方法checkBenefitConcertInCentralPark
,传递到方法checkCreatedEvent
:
eventChecker.checkCreatedEvent(TestEvents::checkBenefitConcertInCentralPark);
该checkBenefitConcertInCentralPark
方法的定义如下(请注意使用空的):
public static Void checkBenefitConcertInCentralPark(EventResource eventResource) {
// JUnit code here...
// assertThat(blablabla :) )
return null; // we can only return null at the end of a method when returning Void
}
然后checkBenefitConcertInCentralPark
方法传递到方法checkCreatedEvent
。
// Function<EventResource, Void> describes the checkBenefitConcertInCentralPark method
public void checkCreatedEvent(Function<EventResource, Void> function) {
function.apply(this.eventResource);
}