java递归统计_Java类递归计数

Class.isAssignableFrom();执行运行时的检查,以校验传递的对象确实属于我们感兴趣的继承结构。

统计基类和确切类型个数。import java.util.HashMap; import java.util.Map; /** * @author E-mail: * @version 2018年6月2日 上午11:45:49 */ public class TypeCounter extends HashMap, Integer> { private Class> baseType; public TypeCounter(Class> baseType){ this.baseType = baseType; } public void count(Object obj){ Class> type = obj.getClass(); if(!baseType.isAssignableFrom(type)) throw new RuntimeException(obj + " incorrect type:" +type+",should be type or subtype of "+baseType ); countClass(type); } private void countClass(Class> type){ Integer quantity = get(type); put(type,quantity==null?1:quantity+1); Class> superClass = type.getSuperclass(); if(superClass!=null&&baseType.isAssignableFrom(superClass)) countClass(superClass); } public String toString(){ StringBuilder result = new StringBuilder("{"); for(Map.Entry, Integer> pair : entrySet()){ result.append(pair.getKey().getSimpleName()); result.append("="); result.append(pair.getValue()); result.append(", "); } result.delete(result.length()-2, result.length()); result.append("}"); return result.toString(); } }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值