标签:递归 baseType 计数 result type public append typeCounter
package t20220518;
import java.util.HashMap;
import java.util.Map;
/**
* @Author: DengJia
* @Date: 2022/5/21 0:17
* @Description:
*/
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 " + 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);
}
}
@Override
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();
}
public static void main(String[] args) {
TypeCounter typeCounter = new TypeCounter(Object.class);
Integer i = 10;
Double j = 1.1;
Byte k = 7;
typeCounter.count(i);
typeCounter.count(j);
typeCounter.count(k);
System.out.println(typeCounter);
}
}
标签:递归,baseType,计数,result,type,public,append,typeCounter 来源: https://www.cnblogs.com/DJOSIMON/p/16294256.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。