写一个方法,让这个方法接受任意对象,并递归打印出该对象所在的继承体系中的所有类

这个问题。。csdn中的答案竟是错的。。

1 准备继承类

    从上往下,依次继承。

2 方法编写(测试了很多次才写出来,基础不好啊 - -~!)

public static void demo(Object obj) {
		Class<?> superclass = obj.getClass().getSuperclass();
		System.out.println(superclass);        
		if(!(superclass.getSimpleName().equals("Object"))) {
			try {
				demo(superclass.newInstance());
			} catch (InstantiationException | IllegalAccessException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

3 测试

public static void main(String[] args) {
		Hehe hehe = new Hehe();
		demo(hehe);
	}

4 打印结果

class com.lan.learn.RIIT.bean.Message
class com.lan.learn.RIIT.bean.Middle
class com.lan.learn.RIIT.bean.User
class java.lang.Object

5 总结

问题纠结在,第一次打印结果正常,第二次的打印结果为Object,并没有依次打印。我分析的造成这个结果有两种情况

1  getSupperClass() 这个方法直接返回根基类

结论:这种情况下第一次打印结果也应该为Object,并且这个方法的返回类型为Class,Class对象的基类可不就是Object嘛

2  方法用的不对。

解决办法 : 通过测试各种get*()方法,发现还是得用getSupperClass()方法,然而这个方法的返回值为Class,并不是上一层父类,问题出在递归调用传递的参数需要一个确切的类的实例。由此恍然大悟,直接使用newInstance()方法获取实例。


基础不好,办事不牢


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值