什么是Class[] null
和Object[] null
下面的代码是什么意思?
public Object selfFactory() {
Class cl = this.getClass();
Constructor cons;
cons = cl.getConstructor((Class[]) null);
return cons.newInstance((Object[]) null);
}
cl.getConstructor((Class[]) null);
将其值和类型的参数都作为类型参数<T>
,因此如果我们提供的null
Class[]
而不是null
Object
for方法调用,则必须进行强制转换.getConstructor()
。
类似地,通过调用采用的构造函数来cons.newInstance((Object[]) null);
创建的新实例,在这种情况下,给出了。如果没有类型转换,则将传递null 。cl
cons
Object[]
null
Object
当方法或构造函数重载时,这很有用。null
不带强制转换的调用将是这种类型,Object
并且通常是模棱两可的:
{
eat(null); // ???
}
void eat(int[] arr);
void eat(Class arr);
使用强制转换,可以调用正确的构造函数或方法。
{
eat((Class) null);
}
同样如多基因润滑剂在如何使用可变参数和反射中所述,
invoke(Object obj, Object... args)
如果您需要将引用类型的数组作为唯一的参数传递,则[...]变得棘手,因为它可以强制转换为Object[]
,即使应将其包装在a内new Object[1]
。你可以做:
m.invoke(this, new Object[] {a}); // Bohzo's solution
这绕过了vararg机制。更简洁地说,您还可以执行以下操作:
m.invoke(this, (Object) a);
Object
强制转换为vararg机制可以为您创建数组。将a
null
作为参数传递给varargs时,也需要此技巧,并且与反射无关。public void foo(String... ss) { System.out.println(ss[0]); } foo(null); // causes NullPointerException foo((String) null); // prints "null"
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句