根据:
http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html
4.5.2参考类型的变量
引用类型可以保存空引用.
http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html
4.5.2参考类型的变量
引用类型可以保存空引用.
当分配的值为空时,是否可以检索引用类型的声明类型?
具体来说,在使用反射的方法中,我希望该方法是无效的,并且对原始声明的类型进行操作(虽然我知道以下代码段不起作用),例如:
String referenceType = null; MyReflectionClass.reflectionMethod(referenceType); ... public static void reflectionMethod(Object referenceType) { Class<?> declaredType = referenceType.getClass(); }
如果需要,我不会厌恶使用泛型类型T而不是Object作为声明的参数类型.
编辑:我知道.getClass()在实例上工作,而不是声明的类型.我想知道是否有可能要求引用它的声明类型.由于类层次结构是静态的,因此获取该信息应该没有问题.
编辑2:这里情况明确:Is Java “pass-by-reference” or “pass-by-value”?
Java只是传递值,所以即使使用引用类型,它总是被处理,就像传递值(对象实例)一样(即使内部只传递一个对象指针).这意味着Java实际上并不具有知道它的类型的引用类型(至少在程序员关注的情况下),它们都在值实例中.
因此,无法确定任何空值的类型.
解决方法
在一个单词中,不.尽管如此,尝试找到空引用的成员并不是很有意义的,因为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 }
如果你只能得到空值,这是很难的(不可能,除非有其他限制)做得比做一个非常幸运的猜测要好得多.