【发布时间】:2011-04-19 23:13:19
【问题描述】:
根据:
http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html
4.5.2 引用类型的变量
引用类型可以包含null 引用。
当赋值为null时,是否可以检索引用类型的声明类型?
具体来说,在一个使用反射的方法中,我希望该方法是空安全的,并且作用于原始声明的类型(尽管我知道下面的代码 sn-p 不起作用),例如:
String referenceType = null;
MyReflectionClass.reflectionMethod(referenceType);
...
public static void reflectionMethod(Object referenceType) {
Class<?> declaredType = referenceType.getClass();
}
如有必要,我不会反对使用泛型将类型 T 而不是 Object 作为声明的参数类型。
编辑:我知道.getClass() 作用于实例,而不是声明的类型。我想知道是否可以向 reference 询问它的声明类型。由于类层次结构是静态的,因此获取该信息应该没有问题。
Edit2: 到这里,情况就搞清楚了:Is Java "pass-by-reference" or "pass-by-value"?
Java 只是按值传递,因此即使使用了引用类型,它也总是像传递值(对象实例)一样被处理(即使内部只传递一个对象指针)。这意味着 Java 实际上并没有知道其类型的引用类型(至少就程序员而言),它都在值实例中。
因此不可能确定任何null 值的类型。
【问题讨论】:
-
@Edit2: 说对象实例是传值是错误的。发生的情况是引用是按值传递的。
-
@brain 但是 Java 会将对该引用的任何引用(调用)处理为值。如果不是这种情况,那么 null Object 仍然是 Object 引用。它不是。 java.sun.com/docs/books/jls/third_edition/html/… 声明“引用值(通常只是引用)是指向这些对象的指针,以及一个特殊的空引用,它不引用任何对象。”链接的stackoverflow问题中的文章javadude.com/articles/passbyvalue.htm很好地解释了这一点。
标签: java null reference-type