当前位置: 首页 > 编程笔记 >

java.lang.Void 与 void的比较及使用方法介绍

谢昂雄
2023-03-14
本文向大家介绍java.lang.Void 与 void的比较及使用方法介绍,包括了java.lang.Void 与 void的比较及使用方法介绍的使用技巧和注意事项,需要的朋友参考一下

void不是函数,是方法的修饰符,void的意思是该方法没有返回值,意思就是方法只会运行方法中的语句,但是不返回任何东西。

java.lang.Void是一种类型。例如给Void引用赋值null。

Void nil = null;

通过Void类的代码可以看到,Void类型不可以继承与实例化。

public final
class Void {
  /**
   * The {@code Class} object representing the pseudo-type corresponding to
   * the keyword {@code void}.
   */
  @SuppressWarnings("unchecked")
  public static final Class<Void> TYPE = (Class<Void>) Class.getPrimitiveClass("void");
  /*
   * The Void class cannot be instantiated.
   */
  private Void() {}
}

Void作为函数的返回结果表示函数返回null(除了null不能返回其它类型)。
 

Void function(int a, int b) {
  //do something
  return null;
 }

在泛型出现之前,Void一般用于反射之中。例如,下面的代码打印返回类型为void的方法名。

public class Test {
  public void print(String v) {}
  public static void main(String args[]){
    for(Method method : Test.class.getMethods()) {
      if(method.getReturnType().equals(Void.TYPE)) {
        System.out.println(method.getName());
      }
    }
  }
}

泛型出现后,某些场景下会用到Void类型。例如Future<T>用来保存结果。Future的get方法会返回结果(类型为T)。

但如果操作并没有返回值呢?这种情况下就可以用Future<Void>表示。当调用get后结果计算完毕则返回后将会返回null。
另外Void也用于无值的Map中,例如Map<T,Void>这样map将具Set<T>有一样的功能。

因此当你使用泛型时函数并不需要返回结果或某个对象不需要值时候这是可以使用java.lang.Void类型表示。

参考:

java.lava.Void与void的比较 ,

http://stackoverflow.com/questions/10839042/what-is-the-difference-between-java-lang-void-and-void

如何判断函数返回void,

http://stackoverflow.com/questions/1924253/how-to-determine-by-reflection-if-a-method-returns-void

总结

以上就是本文关于java.lang.Void 与 void的比较及使用方法介绍的全部内容,如果您想了解更多关于 java.lang.Void的内容,这里有一篇《java.lang.Void类源码解析》是非常合适的,希望对您有所帮助。感兴趣的朋友可以参阅:Java AtomicInteger类的使用方法详解、浅谈Java回收对象的标记和对象的二次标记过程等,有什么问题可以随时留言,大家一起交流讨论。

 类似资料:
  • 谁能解释一下为什么下面的代码不起作用: 但这一个有效: 换句话说,与创建普通类实例相比,接口实现何时是可互换的?当我使用compareTo()方法时会出现错误,该方法是Comparable接口的一部分,由所有包装类(如整数)实现。 所以我猜

  • 本文向大家介绍pandas中apply和transform方法的性能比较及区别介绍,包括了pandas中apply和transform方法的性能比较及区别介绍的使用技巧和注意事项,需要的朋友参考一下 1. apply与transform 首先讲一下apply() 与transform()的相同点与不同点 相同点: 都能针对dataframe完成特征的计算,并且常常与groupby()方法一起使用。

  • 我在Kathy Sierra的书中读到,当我们使用new操作符创建String时,比如String s=new String(“abc”),因为我们使用了new关键字,Java将在普通(非池)内存中创建一个新的String对象,s将引用它。此外,字面上的“ABC”将被放置在池中。 intern()表示,如果String pool已经包含一个字符串,则返回池中的字符串;否则,将String对象添加到

  • HPB是一套基于特定硬件设备的高性能区块链基础设施。其运行在分布式的网络上——各个节点通过P2P的邻居节点相连,各类节点之间独立维护自己各自的区块。HPB的共识算法为系统的核心,共识算法负责协调各类节点以保障整个系统的交易和智能合约的数据一致性。 HPB的算法是一种基于委托投票的POA提升算法。 Proof of Authority [1] 是运行可信区块链节点上的一种共识算法,其更轻量的消息交换

  • 我想知道上面哪一个更好/正确/使用最多,或者是什么。第一种是在@RequestMapping中使用值,另一种是使用路径。 两者都有效。只是想找出两者的区别。 提前谢谢!

  • 我是一名自学型开发人员,现在正在学习Java。我了解到,要对函数接口使用方法引用,我们引用的方法的签名必须与该函数接口内抽象方法的签名匹配。 但是在学习比较器时,发现“Comparator.comparing()”方法接受函数接口并返回一个比较器。我知道函数接口的抽象方法必须接受一个参数并返回一个值。 但是我可以将任何部分(而不是完全)匹配Function接口签名的方法(作为方法参考)传递给比较器