get Fields from current class or parent class - Android java.lang.reflect

Android examples for java.lang.reflect:Field

Description

get Fields from current class or parent class

Demo Code

/*//from   w ww. jav  a2  s  . c  o  m
 * Copyright 2014-2016 QuickAF
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
//package com.java2s;

import java.lang.reflect.Field;

import java.util.ArrayList;

import java.util.List;

public class Main {

    public static List<Field> getFields(Class<?> sourceClass,
            boolean isGetDeclaredField, boolean isGetParentField,
            boolean isGetAllParentField, boolean isDESCGet) {
        List<Field> fieldList = new ArrayList<Field>();
        //?????????????
        if (isGetParentField) {
            //?????????????
            List<Class<?>> classList = null;
            if (isGetAllParentField) {
                classList = getSuperClasss(sourceClass, true);
            } else {
                classList = new ArrayList<Class<?>>(2);
                classList.add(sourceClass);
                Class<?> superClass = sourceClass.getSuperclass();
                if (superClass != null) {
                    classList.add(superClass);
                }
            }

            //???????????
            if (isDESCGet) {
                for (int w = classList.size() - 1; w > -1; w--) {
                    for (Field field : isGetDeclaredField ? classList
                            .get(w).getDeclaredFields() : classList.get(w)
                            .getFields()) {
                        fieldList.add(field);
                    }
                }
            } else {
                for (int w = 0; w < classList.size(); w++) {
                    for (Field field : isGetDeclaredField ? classList
                            .get(w).getDeclaredFields() : classList.get(w)
                            .getFields()) {
                        fieldList.add(field);
                    }
                }
            }
        } else {
            for (Field field : isGetDeclaredField ? sourceClass
                    .getDeclaredFields() : sourceClass.getFields()) {
                fieldList.add(field);
            }
        }
        return fieldList;
    }

    public static List<Field> getFields(Class<?> sourceClass) {
        return getFields(sourceClass, true, true, true, true);
    }

    public static List<Class<?>> getSuperClasss(Class<?> sourceClass,
            boolean isAddCurrentClass) {
        List<Class<?>> classList = new ArrayList<Class<?>>();
        Class<?> classs;
        if (isAddCurrentClass) {
            classs = sourceClass;
        } else {
            classs = sourceClass.getSuperclass();
        }
        while (classs != null) {
            classList.add(classs);
            classs = classs.getSuperclass();
        }
        return classList;
    }
}

Related Tutorials