在学习Java反射时,测试时遇到了一些问题 getSuperclass()
下面是我的测试代码:
System.out.println(java.io.Closeable.class.getSuperclass());
Run Code Online (Sandbox Code Playgroud)
在我的期望中,此行将打印类似的内容,AutoClosable因为这是Closable扩展的类。但是事实证明是null。我试图解释这是因为Closable位于,java.io而AutoClosable位于,java.lang并且getSuperclass()仅在包范围内搜索。
但是如果我这样写,这种解释是没有意义的:
Closeable closeable = () -> {
};
System.out.println(closeable.getClass().getSuperclass());
Run Code Online (Sandbox Code Playgroud)
上面的代码导致class java.lang.Object。结果使这个问题更加特殊和难以理解。
java如何实现此getSuperclass()方法,为什么该方法不返回与其名称相对应的结果?
无论是Closeable也不AutoCloseable是类,它们是两个接口。
getSuperclass仅返回超类,不返回超接口。如果调用的不是类本身(例如接口或原始类型),则该方法将返回null。
您可能需要致电getInterfaces。
| 归档时间: |
|
| 查看次数: |
45 次 |
| 最近记录: |