Discuss / Java / 代码结果与预期不一致

代码结果与预期不一致

Topic source
System.out.println(java.io.Closeable.class.getSuperclass()); // AutoCloseable,因为Closeable继承自AutoCloseable

这条命令运行后实际返回的是null,是否是因为AutoClosable是位于java.lang内,而Closable位于java.io内,getSuperclass()方法只搜索包内的范围?

Closeable closeable = () -> {};System.out.println(closeable.getClass().getSuperclass());

然后这样写得到的结果是Object

根据文档,接口调用getSuperclass()只能得到空,因为接口不可能继承自某个具体类。如果要获得AutoClosable,应该是去获得Closable所实现的接口,即:

System.out.println(java.io.Closeable.class.getInterfaces()[0])

  • 1

Reply