/**
* 类型计数器
*/
public class TypeCounter extends HashMap<Class<?>,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+" incouurect 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<Class<?>,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();
}
}
java类型计数器
最新推荐文章于 2024-09-17 23:26:07 发布