Java For循环看不懂啊

public LinkedHashMap xmlFieldMap(Class<?> cls){
LinkedHashMap xmlBuilderMap = new LinkedHashMap();
for (Class<?> precls = this.getClass(); cls.isAssignableFrom(precls) && !cls.equals(precls); precls = precls.getSuperclass()) {
xmlBuilderMap.putAll(claFields2Map(precls));
}
return xmlBuilderMap;
}

    看不懂这个for

for循环的结构为for( ; ; ){}
第一个分号之前的为循环变量,两个分号中间的为循环条件,第二个分号后面的为满足条件之后的操作
你这个应该是找到对应的类

isAssignableFrom 用来判断cls 是否是precls的父类(相同、接口)

整个逻辑就是 precls 是一个class对象 初始为当前对象的class对象
1 只要满足 precls是cls的子类 且precls不等于cls
则进行循环体 将precls中的所有属性放进map
然后 precls等于precls的父类 继续 1
2 不满足退出循环

Class<?> precls = this.getClass()获取当前主线程的类路径+类名,是个对象。

这里是判断条件cls.isAssignableFrom(precls) && !cls.equals(precls);
cls.isAssignableFrom(precls):cls对象与precls对象是否相同的类或cls对象的类是precls对象类的子类或接口;
!cls.equals(precls):cls对象与precls对象不相同;
cls对象的类是precls对象类的子类或接口;

之后通过你们自己写的这个claFields2Map方法(这里要看你们这个方法怎么写的),不过看你的评论,你们这个方法应该是查找该类,和该类的子类的所有属性和接口。

precls = precls.getSuperclass();
获取该类的超类对象Class,之后获取该超类的对象,继续比较。

private LinkedHashMap claFields2Map(Class<?> cla) {
LinkedHashMap result = new LinkedHashMap();
for (Field fd : cla.getDeclaredFields()){
result.put(fd.getName(), fd);
}
return result;
}

    这是claFields2Map方法