java.lang.Void和void有什么区别?
在API中
“Void类是一个不合理的占位符类,用于保存对表示Java关键字void的Class对象的引用。
- 什么是“不合理”的持有人类? 什么时候会使用java.lang.Void? 如果这个class是“不合理的”,那有什么用呢?
-   java.lang.Void和void什么区别?
  Void的唯一一点是保持Void.TYPE ,就像void.class 。 如果你有一个返回void的方法的reflection引用,并且你得到它的返回types,它将返回Void.TYPE 。 
你不能,也不应该把它用于其他任何事情。
  java.lang.Void类似于java.lang.Integer 。  Integer是一种对原始typesint进行装箱的方法。  Void是一种对原始typesvoid进行装箱的方法。 
  “但是等等, void没有任何可能的价值!” 
 对! 这就是使java.lang.Void “不合理”的原因。  🙂 
  Javatypes系统的一个很好的特性是每个原始types都有一个盒装的等价物。  int有Integer , long有Long , byte有Byte …, void有Void 。 如果Void 不存在,这将是奇怪的和不对称的。 
  “那么java.lang.Void和void之间有什么区别呢? 
 简单。  void是一个原始types。  Void是从Objectinheritance的引用types。 他们是相似的,他们都没有任何可能的价值; 但从types体系的angular度来看,它们是两种截然不同的types。 
  “但是我的程序中没有使用Void 。” 
 而我在我的GarbageCollectorMXBean没有任何用处。 有些function没有非晦涩的用途。 没关系。 
  Void最常见的用途是reflection,但这不是唯一可以使用的地方。 
  void是一个关键字,意味着一个函数不会产生一个值。 
  java.lang.Void是一个引用types,那么以下是有效的: 
  Void nil = null; 
(到目前为止,这并不有趣…)
 因此,type(一个返回值types为Void的函数)意味着函数* always *返回null (它不能返回null以外的任何东西,因为Void没有实例)。 
  Void function(int a, int b) { //do something return null; } 
为什么我会喜欢一个总是返回null的函数?
 在generics的发明之前,我没有使用Void的用例。 
 有了generics,有一些有趣的例子。 例如, Future<T>是由另一个线程执行的asynchronous操作的结果的持有者。  Future.get将返回( T型的)操作值,并将阻塞,直到执行计算。 
 但是……如果没有什么可以回来的话呢? 简单:使用Future<Void> 。 例如,在Google App Engine中,asynchronous数据存储服务delete操作会返回未来. When  . When is invoked on that future, get()时is invoked on that future,在删除完成后返回null。 可以用Callable s写一个类似的例子。 
 另一个用例是没有值的Map ,即一个Map<T,Void> 。 这样的映射就像一个Set<T> ,那么当没有Set等价实现(例如,没有WeakHashSet ,那么可以使用WeakHashMap<T,Void> )时,它可能是有用的。 
void是void的一个AutoBoxing特性(自JDK 1.5起)。
那么它自我解释说,虚空是参考,而虚无是一种原始的types。
那么,要求什么地方必须使用Void?
genericstypes的一个常见用法,我们不能使用原始types。
说,Android的
AsyncTaks<Params, Progress, Result>如果我不想得到进展更新怎么办。 我不能在这里使用void(原始types),我们需要java.lang.Void
空格是有用的,因为有时你需要在方法本身之外指定方法的返回types。
 例如,使用这个java 8 lambdaexpression式 ,它使用名为checkBenefitConcertInCentralPark的方法检查EventResource对象是否具有某些属性,并将其传递给方法checkCreatedEvent : 
 eventChecker.checkCreatedEvent(TestEvents::checkBenefitConcertInCentralPark); 
  checkBenefitConcertInCentralPark方法是这样定义的(注意使用Void): 
  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方法传递给checkBenefitConcertInCentralPark方法。 
  // Function<EventResource, Void> describes the checkBenefitConcertInCentralPark method public void checkCreatedEvent(Function<EventResource, Void> function) { function.apply(this.eventResource); } 
 另一个使用Void例子是SwingWorker 
 new SwingWorker<Void, Integer> () { @Override protected Void doInBackground(){ ... } @Override protected void process(List<Integer> chunk){ ... } @Override public void done(){ ... } }.execute();