java - 值为 null 的引用类型类型?

标签 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();
}

如有必要,我不反对使用泛型将类型 T 而不是 Object 作为声明的参数类型。

编辑:我知道 .getClass() 作用于实例,而不是声明的类型。我想知道是否可以向 reference 询问它的声明类型。由于类层次结构是静态的,因此获取该信息应该没有问题。

Edit2: 到这里,情况就清楚了:Is Java "pass-by-reference" or "pass-by-value"?
Java 仅按值传递,因此即使使用引用类型,也始终将其视为传递值(对象实例)来处理(即使内部只传递对象指针)。这意味着 Java 实际上并没有一个知道它的类型的引用类型(至少对程序员而言),它都在值实例中。
因此,不可能确定任何 null 值的类型。

最佳答案

一句话,没有。但是,尝试查找 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
}

如果您只能获得 null 值,则很难(除非施加其他约束,否则不可能)做得比非常幸运的猜测要好得多。

关于java - 值为 null 的引用类型类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5712881/

相关文章:

java - 使用 servlet 与使用 jsp 打印 HTML。他们的优势是什么?

java - jVisualVM - JIT Activity 指标

java - Java 中正确的容器/数据结构

c - 获取 NULL 错误

pointers - 简洁的 nil 检查结构字段指针?

c# - 正确使用 MemoryCache 和泛型?

swift - 在 Swift 中检查值或引用类型

javascript - 如何防止生成空的 Birt 报告

sql - 在 Oracle DB 中使用 LISTAGG 时,如何从字符串中删除 CHR(0)?

c++ - 如果在没有 new 运算符的情况下初始化,C++ 是否将类对象视为值类型?