What's the difference between Void and no parameter?

前端 未结 4 1774
深忆病人
深忆病人 2020-12-23 13:03

I have a class which defines two overloaded methods

public void handle(Void e) 

protected void handle() 

Obviously they are different, esp

4条回答
  •  隐瞒了意图╮
    2020-12-23 13:48

    Void is a special class usually used only for reflection - its primary use is to represent the return type of a void method. From the javadoc for Void:

    The Void class is an uninstantiable placeholder class to hold a reference to the Class object representing the Java keyword void.

    Because the Void class can not be instantiated, the only value you can pass to a method with a Void type parameter, such as handle(Void e), is null.


    That's the official version of events, but for those who are interested, despite claims to the contrary in the javadoc of Void, you can actually instantiate an instance of Void:

    Constructor c = Void.class.getDeclaredConstructor();
    c.setAccessible(true);
    Void v = c.newInstance(); // Hello sailor!
    


    That said, I have seen Void "usefully" used as a generic parameter type when you want to indicate that the type is being "ignored", for example:

    Callable ignoreResult = new Callable () {
        public Void call() throws Exception {
            // do something
            return null; // only possible value for a Void type
        }
    }
    

    Callable's generic parameter is the return type, so when Void is used like this, it's a clear signal to readers of the code that the returned value is not important, even though the use of the Callable interface is required, for example if using the Executor framework.

提交回复
热议问题