“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
的构造函数。 但我可以将此视为系统滥用行为。 祝你好运。