typecounter.java

来自「看thinkinjava学习java时」· Java 代码 · 共 39 行

JAVA
39
字号
package myutils;
import java.util.*;

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 + " incorrect type:" + type + ". should be type or subtype of");
    	 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();
	}
	

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?