protected <T> String getCountField(Class<T> clazz){
String out = "o";
try {
PropertyDescriptor[] propertyDescriptors = Introspector.getBeanInfo(clazz).getPropertyDescriptors();
for(PropertyDescriptor propertydesc : propertyDescriptors){
Method method = propertydesc.getReadMethod();
if(method!=null && method.isAnnotationPresent(EmbeddedId.class)){
PropertyDescriptor[] ps = Introspector.getBeanInfo(propertydesc.getPropertyType()).getPropertyDescriptors();
out = "o."+ propertydesc.getName()+ "." + (!ps[1].getName().equals("class")? ps[1].getName(): ps[0].getName());
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
        return out;
}

解决方案 »

  1.   

    protected <T> String getCountField(Class<T> clazz){
    String out = "o";
    try {
    PropertyDescriptor[] propertyDescriptors = Introspector.getBeanInfo(clazz).getPropertyDescriptors();
    for(PropertyDescriptor propertydesc : propertyDescriptors){
    Method method = propertydesc.getReadMethod();
    if(method!=null && method.isAnnotationPresent(EmbeddedId.class)){
    PropertyDescriptor[] ps = Introspector.getBeanInfo(propertydesc.getPropertyType()).getPropertyDescriptors();
    out = "o."+ propertydesc.getName()+ "." + (!ps[1].getName().equals("class")? ps[1].getName(): ps[0].getName());
    break;
    }
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
            return out;
    }
      

  2.   

    protected <T> String getCountField(Class <T> clazz){ 
    String out = "o"; 
    try { 
    PropertyDescriptor[] propertyDescriptors = Introspector.getBeanInfo(clazz).getPropertyDescriptors(); //拿到clazz类的所有属性的描述
    for(PropertyDescriptor propertydesc : propertyDescriptors){ //遍历这个描述器数组
    Method method = propertydesc.getReadMethod(); //拿到读取这个属性的方法。
    if(method!=null && method.isAnnotationPresent(clazz)){ 
    PropertyDescriptor[] ps = Introspector.getBeanInfo(propertydesc.getPropertyType()).getPropertyDescriptors(); //拿到属性类型的所有属性的描述
    out = "o."+ propertydesc.getName()+ "." + (!ps[1].getName().equals("class")? ps[1].getName(): ps[0].getName()); //这个应该可以看懂
    break; 


    } catch (Exception e) { 
    e.printStackTrace(); 

            return out; 
    }