Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does "instanceof Void" always return false?

Tags:

Can this method return true somehow?

public static <T> boolean isVoid(T t) {     return t instanceof Void; } 
like image 907
Eng.Fouad Avatar asked Jul 09 '11 18:07

Eng.Fouad


2 Answers

Yes, but I'm sure that isn't really useful:

public static void main(final String[] args) throws Exception {     final Constructor c = Void.class.getDeclaredConstructors()[0];     c.setAccessible(true);     System.out.println(c.newInstance(null) instanceof Void); } 

A Void class can't be instantiated so normally your code wouldn't require to deal with Void instances. The above code snippet is just an example of what havoc you can unleash when using reflection... ;-)

like image 83
Sanjay T. Sharma Avatar answered Nov 15 '22 11:11

Sanjay T. Sharma


I fail to see why you would check if a value is an instance of void (or Void) since, like said nth times, cannot be instanciated, or even extended without hacking with reflexion. However, for a more useful situation, if you want to know if a given Class is of a void type, you would not use instanceof and your method parameter would be of type Class<?> instead. A test case would be :

public class VoidCheckTest {      public static void main(String...args) throws SecurityException, NoSuchMethodException {         Class<VoidCheckTest> c = VoidCheckTest.class;          Method m = c.getMethod("main", String[].class);          System.out.println(m.getReturnType().getName() + " = " + isVoid(m.getReturnType()));             }      private static boolean isVoid(Class<?> t) {         return Void.class.isAssignableFrom(t) || void.class.equals(t);     } } 

which would output

void = true 

There might other use cases for this method, but I don't see any other right now.

like image 45
Yanick Rochon Avatar answered Nov 15 '22 12:11

Yanick Rochon