Java反射获取超类获得意外结果

Yif*_*eng 3 java reflection

在学习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()方法,为什么该方法不返回与其名称相对应的结果?

Thi*_*ilo 6

无论是Closeable也不AutoCloseable是类,它们是两个接口。

getSuperclass仅返回超类,不返回超接口。如果调用的不是类本身(例如接口或原始类型),则该方法将返回null

您可能需要致电getInterfaces