代码结果与预期不一致
Topic sourceCloseable closeable = () -> {};System.out.println(closeable.getClass().getSuperclass());
然后这样写得到的结果是Object
根据文档,接口调用getSuperclass()只能得到空,因为接口不可能继承自某个具体类。如果要获得AutoClosable,应该是去获得Closable所实现的接口,即:
System.out.println(java.io.Closeable.class.getInterfaces()[0])
1.Closeable是一个接口,文章中写到:
此外,对所有
interface
的Class
调用getSuperclass()
返回的是null
,获取接口的父接口要用getInterfaces()
:
2.Closeable是一个接口,接口是无法实例化的,所以此时的closeable是Closeable的一个具体的实现类的实例化对象,所以:
System.out.println(closeable.getClass().getSuperclass());
的结果是Object,因为所有的类都默认继承Object
- 1
抱猪看太阳
这条命令运行后实际返回的是null,是否是因为AutoClosable是位于java.lang内,而Closable位于java.io内,getSuperclass()方法只搜索包内的范围?