public static CustomPropertyDescriptor[] getPropertyDescriptors(Class<?> clazz) throws NullPointerException {
        if (clazz == null) {
            throw new NullPointerException("clazz为null");
        }
        // 首先从缓存中检查
        CustomPropertyDescriptor[] descriptors = CACHE.get(clazz);
        if (descriptors != null) {
            log.debug("获取Class {} 的说明时发现缓存中有，取出缓存中的说明返回", clazz);
            return descriptors;
        }

        Field[] fields = getAllFields(clazz);

        descriptors = new CustomPropertyDescriptor[fields.length];
        if (fields.length == 0) {
            log.debug("源{}中不存在已经声明的字段", clazz.getName());
            CACHE.put(clazz, descriptors);
            return descriptors;
        }

        int j = 0;
        for (Field field : fields) {
            CustomPropertyDescriptor descriptor = buildDescriptor(field, clazz);
            if (descriptor != null) {
                descriptors[j++] = descriptor;
            }
        }

        if (j < descriptors.length) {
            log.debug("构建构成中发生了异常，数组中有null，除去null");
            CustomPropertyDescriptor[] propertyDescriptor = new CustomPropertyDescriptor[j];
            System.arraycopy(descriptors, 0, propertyDescriptor, 0, j);
            CACHE.put(clazz, propertyDescriptor);
            return propertyDescriptor;
        } else {
            log.debug("构建没有异常，构建成功");
            CACHE.put(clazz, descriptors);
            return descriptors;
        }
    }
public static CustomPropertyDescriptor [ ] getPropertyDescriptors ( Class < ? > clazz ) throws NullPointerException { if ( clazz == null ) { throw new NullPointerException ( "clazz为null" ) ; } CustomPropertyDescriptor [ ] descriptors = CACHE . get ( clazz ) ; if ( descriptors != null ) { log . debug ( "获取Class {} 的说明时发现缓存中有，取出缓存中的说明返回" , clazz ) ; return descriptors ; } Field [ ] fields = getAllFields ( clazz ) ; descriptors = new CustomPropertyDescriptor [ fields . length ] ; if ( fields . length == 0 ) { log . debug ( "源{}中不存在已经声明的字段" , clazz . getName ( ) ) ; CACHE . put ( clazz , descriptors ) ; return descriptors ; } int j = 0 ; for ( Field field : fields ) { CustomPropertyDescriptor descriptor = buildDescriptor ( field , clazz ) ; if ( descriptor != null ) { descriptors [ j ++ ] = descriptor ; } } if ( j < descriptors . length ) { log . debug ( "构建构成中发生了异常，数组中有null，除去null" ) ; CustomPropertyDescriptor [ ] propertyDescriptor = new CustomPropertyDescriptor [ j ] ; System . arraycopy ( descriptors , 0 , propertyDescriptor , 0 , j ) ; CACHE . put ( clazz , propertyDescriptor ) ; return propertyDescriptor ; } else { log . debug ( "构建没有异常，构建成功" ) ; CACHE . put ( clazz , descriptors ) ; return descriptors ; } }
获取指定Class的字段说明

@param clazz 指定的class
@return 指定class的字段说明（数组中不会有null）
@throws NullPointerException clazz为null时抛出该异常