The page I am working on has a javascript function executed to print parts of the page. For some reason, printing in Safari, causes the window to somehow update. I say somehow, because it does not really refresh as in reload the page, but rather it starts the "rendering" of the page from start, i.e. scroll to top, flash animations start from 0, and so forth. The effect is reproduced by this fiddle: http://jsfiddle.net/fYmnB/ Clicking the print button and finishing or cancelling a print in Safari causes the screen to "go white" for a sec, which in my real website manifests itself as something "like" a reload. While running print button with, let's say, Firefox, just opens and closes the print dialogue without affecting the fiddle page in any way. Is there something with my way of calling the browsers print method that causes this, or how can it be explained - and preferably, avoided? P.S.: On my real site the same occurs with Chrome. In the ex
Void has become convention for a generic argument that you are not interested in. There is no reason why you should use any other non-instantiable type, such as System.
ReplyDeleteIt is also often used in for example Map values (although Collections.newSetFromMap uses Boolean as maps don't have to accept null values) and java.security.PrivilegedAction.
I wrote a weblog entry on Void a few years back.
Given that there are no public constructors, I would say it can't be assigned anything other than null. I've only used it as a placeholder for "I don't need to use this generic parameter," as your example shows.
ReplyDeleteIt could also be used in reflection, from what its Javadoc says:
The Void class is an uninstantiable placeholder class to hold a reference to the Class object representing the Java keyword void.
Future<Void> works like charm. :)
ReplyDeleteYou can create instance of Void using reflections, but they are not useful for anything. Void is a way to indicate a generic method returns nothing.
ReplyDeleteAll the primitive wrapper classes (Integer, Byte, Boolean, Double, etc.) contain a reference to the corresponding primitive class in a static TYPE field, for example:
ReplyDeleteInteger.TYPE == int.class
Byte.TYPE == byte.class
Boolean.TYPE == boolean.class
Double.TYPE == double.class
Void was initially created as somewhere to put a reference to the void type:
Void.TYPE == void.class
However, you don't really gain anything by using Void.TYPE. When you use void.class it's much clearer that you're doing something with the void type.
As an aside, the last time I tried it, BeanShell didn't recognise void.class, so you have to use Void.TYPE there.
Before generics, it was created for the reflection API, to hold TYPE returned by Method.getReturnType() for a void method, corresponding to the other primitive type classes.
ReplyDeleteEDIT: From the JavaDoc of Void: "The Void class is an uninstantiable placeholder class to hold a reference to the Class object representing the Java keyword void". Prior to Generics, I am aware of no use other than reflection.