是什么java.lang.Void的和无效的区别?是什么java.lang.Void的和无效的区别?

2019-05-16 19:39发布

在API

“Void类是一个不可实例化占位符类保持于表示Java关键字空隙类对象的引用。”

  1. 什么是“不可实例”占位符类? 当将java.lang.Void使用? 如果类是“不可实例”,有什么用呢?
  2. 有什么区别java.lang.Voidvoid

Answer 1:

唯一一点 Void是持有Void.TYPE ,这是有点像void.class 。 如果你有一个返回方法反射参考void ,你会得到它的返回类型,它会返回Void.TYPE

你不能,也不应该用它做别的事情。



Answer 2:

java.lang.Void类似于java.lang.IntegerInteger是基本类型的装箱值的方式intVoid是基本类型的装箱值的方式void

“别急, void没有任何可能的值!”

对! 这是什么使得java.lang.Void “不可实例”。 :)

这是每一个基本类型有盒装相当于Java类型系统的一个很好的功能。 intIntegerlongLongbyte具有Byte ...和void具有Void 。 这将是不可思议和不对称,如果Void 存在。

“那么,有什么之间的区别java.lang.Voidvoid ?”

简单。 void是基本类型。 Void是从继承的引用类型Object 。 他们是在他们既不拥有任何可能的值相近; 但尽管如此,他们是两个完全不同的类型,从类型系统的观点。

“但我没有任何使用Void在我的计划。”

而且我没有任何使用GarbageCollectorMXBean矿井。 有些功能无晦涩的用途。 没关系。



Answer 3:

最常见的用途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> )。



Answer 4:

空隙是一个自动装箱特征(自JDK 1.5)的空隙。

以及它的自解释性的该空隙参考而空隙是基本类型。

所以,当需求出现不得不使用太虚???

与泛型类型,我们不能用原始的一种常见的用法。

也就是说,在Android的情况下AsyncTaks<Params, Progress, Result>如果我不希望得到的最新进展是什么。 我不能使用无效(基本型),在这里我们需要java.lang.Void的



Answer 5:

用于使用另一示例VoidSwingWorker

new SwingWorker<Void, Integer> () {
    @Override
    protected Void doInBackground(){
        ...
    }
    @Override
    protected void process(List<Integer> chunk){
        ...
    }
    @Override
    public void done(){
        ...
    }
}.execute();


Answer 6:

因为有时你需要指定方法本身之外的方法的返回类型为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);
    }


文章来源: What is the difference between java.lang.Void and void?
标签: java void