这种方法能以某种方式返回true
吗?“instanceof Void”是否总是返回false?
public static <T> boolean isVoid(T t)
{
return t instanceof Void;
}
这种方法能以某种方式返回true
吗?“instanceof Void”是否总是返回false?
public static <T> 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
实例。上面的代码片段只是使用反射时可能释放什么破坏的一个例子... ;-)
+1反思“滥用” –
+1非常好!顺便说一句,你只是使用'c.newInstance()'(不需要'null'参数) – Bohemian
+1防止通过反射创建的唯一类是Class。 –
否。要使其返回true,必须调用它并传递Void
类型的参数。但是类Void的构造函数是私有的,所以你不能调用它。而且,这个课程是最终的,所以你甚至不能扩展它。因此,您无法创建类Void
的实例。但是需要让你的方法返回true。
顺便说一句:如果你真的想这样做,请通过反射调用Void
的构造函数。但我可以把它看作是一个滥用系统的练习。祝你好运。
号:
Constructor<Void> cv = Void.class.getDeclaredConstructor();
cv.setAccessible(true);
Void v = cv.newInstance();
System.out.println(v instanceof Void); //-> true
我不明白你为什么会检查是否值是void
(或Void
),因为,就像说第n次,不能被实例化,或者即使没有与黑客扩展实例反射。但是,对于更有用的情况,如果您想知道给定的Class
是否为空类型,则不会使用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
可能有其他用途的情况下这种方法,但我没有看到任何其他的现在。
你怎么称呼这个方法?你能举一些例子吗? –
为什么你甚至想要做这个测试?这一切背后必定有一些故事。 –
@Hovercraft我只是喜欢这些棘手的行为旁边我想知道更多关于“虚空” –