此方法可以某种方式返回true
吗?
public static <T> boolean isVoid(T t)
{
return t instanceof Void;
}
答案 0 :(得分:51)
是的,但我确信这不是很有用:
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
个实例。上面的代码片段只是使用反射时可以释放出来的一个例子...; - )
答案 1 :(得分:6)
我无法理解为什么你会检查一个值是否是void
(或Void
)的一个实例,因为,就像所说的第n次一样,不能实现,甚至不用反射来破解。但是,对于更有用的情况,如果您想知道给定的Class
是否为void类型,则不会使用instanceof
,而您的方法参数将为Class<?>
类型。测试案例将是:
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);
}
}
将输出
void = true
此方法可能还有其他用例,但我现在没有看到任何其他用例。
答案 2 :(得分:2)
没有。要使其返回true,您必须调用它并传递类型为Void
的参数。但类Void的构造函数是私有的,所以你不能调用它。此外,这个类是最终的,所以你甚至无法扩展它。因此,您无法创建类Void
的实例。但是需要让你的方法返回true。
BTW:如果你真的想这样做,请通过反射调用Void
的构造函数。但我可以将此视为系统滥用行为。祝你好运。
答案 3 :(得分:2)
否:
Constructor<Void> cv = Void.class.getDeclaredConstructor();
cv.setAccessible(true);
Void v = cv.newInstance();
System.out.println(v instanceof Void); //-> true