“instanceof Void”总是返回false吗?

这种方法能以某种方式返回true吗?

 public static  boolean isVoid(T t) { return t instanceof Void; } 

是的,但我确信这不是很有用:

 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); } 

Void类无法实例化,因此通常您的代码不需要处理Void实例。 上面的代码片段只是一个例子,说明在使用reflection时可以释放出来的东西…… 😉

我不明白为什么你会检查一个值是否是void (或Void )的一个实例,因为,就像第n次所说的那样,不能实现,甚至可以在没有reflection的情况下进行扩展。 但是,对于更有用的情况,如果您想知道给定的Class是否为void类型,则不会使用instanceof而您的method参数将是Class类型。 一个测试用例是:

 public class VoidCheckTest { public static void main(String...args) throws SecurityException, NoSuchMethodException { Class 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); } } 

哪个会输出

 void = true 

此方法可能还有其他用例,但我现在没有看到任何其他用例。

没有:

 Constructor cv = Void.class.getDeclaredConstructor(); cv.setAccessible(true); Void v = cv.newInstance(); System.out.println(v instanceof Void); //-> true 

不。要使其返回true,您必须调用它并传递Void类型的参数。 但是类Void的构造函数是私有的,所以你不能称之为它。 此外,这个类是最终的,所以你甚至无法扩展它。 因此,您无法创建类Void的实例。 但是需要让你的方法返回true。

顺便说一句:如果你真的想这样做,请通过reflection调用Void的构造函数。 但我可以将此视为系统滥用行为。 祝你好运。