Ala*_*eet 9 java null reference-type
根据:http:
//java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html
4.5.2引用类型
的变量引用类型可以包含null引用.
当指定的值是null?时,是否可以检索引用类型的声明类型?
具体来说,在使用反射的方法中,我希望该方法是null安全的并且对原始声明的类型起作用(虽然我知道以下代码片段不起作用),例如:
String referenceType = null;
MyReflectionClass.reflectionMethod(referenceType);
...
public static void reflectionMethod(Object referenceType) {
Class<?> declaredType = referenceType.getClass();
}
Run Code Online (Sandbox Code Playgroud)
如果需要,我不会反对使用泛型来获取类型T而不是Object声明的参数类型.
编辑:我知道它.getClass()适用于实例,而不是声明的类型.我想知道是否可以询问引用它的声明类型.由于类层次结构是静态的,因此获取该信息应该没有问题.
编辑2:在这里,情况很清楚:Java是"通过引用传递"还是"按值传递"?
Java只是按值传递,因此即使使用了引用类型,也总是处理它,就好像传递了值(对象实例)一样(即使内部只传递了一个对象指针).这意味着Java实际上并没有一个知道它的类型的引用类型(至少就程序员而言),它都在值实例中.
因此,无法确定任何null值的类型.
总而言之,没有.但是,尝试查找空引用的成员并没有多大意义,因为null意味着没有任何东西.你最好不要只允许null作为输入,可能是通过抛出一个NullPointerException.
如果必须处理null,也许最好的方法是显式传递类引用(甚至更好,直接引用相关方法).
public static void reflectionMethod(Object param, Class<?> referenceType) // null is dis-allowed for referenceType
{
// ... no need to try to back-track the type from an object
}
Run Code Online (Sandbox Code Playgroud)
如果你只能获得空值,那么除非有一个非常幸运的猜测,否则很难(除非有其他限制因素).
你误会了.getClass()没有告诉你变量的声明类型,它会告诉你对象的类型(如果有的话).让我们停下来,退后一分钟 - 你会指的是哪个变量,如果它那样做了?原始变量?方法参数?它沿途经过的任何其他变量?那将是彻底的疯狂.