Java 是不是;“无效实例”;总是返回false?
此方法能否以某种方式返回Java 是不是;“无效实例”;总是返回false?,java,generics,void,instanceof,Java,Generics,Void,Instanceof,此方法能否以某种方式返回true public static <T> boolean isVoid(T t) { return t instanceof Void; } 公共静态布尔值isVoid(T) { 返回Void的t instanceof; } 是的,但我确信这并不是真的有用: public static void main(final String[] args) throws Exception { final Constructor c = Void.
true
public static <T> boolean isVoid(T t)
{
return t instanceof Void;
}
公共静态布尔值isVoid(T)
{
返回Void的t instanceof;
}
是的,但我确信这并不是真的有用:
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
实例。上面的代码片段只是一个示例,说明了使用反射时可能造成的破坏…;-) 否。要使其返回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
Constructor cv=Void.class.getDeclaredConstructor();
cv.setAccessible(真实);
Void v=cv.newInstance();
System.out.println(v instanceof Void);//->真的
我不明白您为什么要检查某个值是否是void
(或void
)的实例,因为像前面所说的第n次一样,如果不使用反射进行黑客攻击,就无法实例化,甚至无法扩展。但是,对于更有用的情况,如果您想知道给定的类
是否为void类型,则不会使用instanceof
,而方法参数将为类
类型。一个测试用例是:
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);
}
}
这个方法可能还有其他的用例,但我现在没有看到其他的。这个方法怎么称呼?你能举几个例子吗?你为什么要做这个测试?这一切的背后一定有一些故事。@Hovercraft我只是喜欢旁边这些狡猾的行为,我想知道更多关于“空虚”+1的可笑+1非常好!顺便说一句,您只需使用
c.newInstance()
(不需要null
param)+1,通过反射无法创建的唯一类是类。这就是为什么如果您想确保没有人实例化类(例如库),您不仅需要将构造函数设置为私有,还需要使该构造函数引发异常。我建议使用UnsupportedOperationException。@Sanjary T.Sharma啊,“QFT”.equals(“引用为真”)?等效代码在Scala中不需要任何复杂的代码:()。isInstanceOf[Unit]==true
void = true