反射找到成员

package com.yd.wmsc.util;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

public class ReflectTest {
    public static List<String> getPrefixList(Class Clazz, String prefix) {
        List<String> list = new ArrayList<String>();
        try {
            // 或得bean类
            BeanInfo beninfo = Introspector.getBeanInfo(Clazz);
            Field[] fields = Clazz.getDeclaredFields();
            for (Field field : fields) {
                System.out.println(field.getName());
            }

            System.out.println("======================================");
            // 获得所有的属性描述
            PropertyDescriptor[] propertydescriptors = beninfo.getPropertyDescriptors();
            for (PropertyDescriptor pd : propertydescriptors) {
                System.out.println(pd.getName());
                if (pd.getName().startsWith(prefix)) {
                    list.add(pd.getName());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }

    public static void main(String[] args) {
        ReflectTest.getPrefixList(ContentWordBean.class, "TX_TYPE_");
    }
}
package com.yd.wmsc.util;

import java.util.List;

public class ContentWordBean {

    //题目类型
    private String itemType;
    //序号
    private String serial;
    //题目内容
    private String title;
    //答案
    private List<String> answerList;
    //标准答案
    private String lastAnswer;
    //答案解析
    private String analysis;
    //难度系数
    private String koc;
    //分数
    private String score;
    //章名称
    private String chapterName;
    //节名称
    private String sectionName;
    //知识点
    private String knowledge;
    //图片
        public String getKnowledge() {
        return knowledge;
    }
    /*public void setKnowledge(String knowledge) {
        this.knowledge = knowledge;
    }*/
    /*public String getItemType() {
        return itemType;
    }
    public void setItemType(String itemType) {
        this.itemType = itemType;
    }
    public String getSerial() {
        return serial;
    }
    public void setSerial(String serial) {
        this.serial = serial;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public List<String> getAnswerList() {
        return answerList;
    }
    public void setAnswerList(List<String> answerList) {
        this.answerList = answerList;
    }
    public String getLastAnswer() {
        return lastAnswer;
    }
    public void setLastAnswer(String lastAnswer) {
        this.lastAnswer = lastAnswer;
    }
    public String getAnalysis() {
        return analysis;
    }
    public void setAnalysis(String analysis) {
        this.analysis = analysis;
    }
    public String getKoc() {
        return koc;
    }
    public void setKoc(String koc) {
        this.koc = koc;
    }
    public String getScore() {
        return score;
    }
    public void setScore(String score) {
        this.score = score;
    }
    public String getChapterName() {
        return chapterName;
    }
    public void setChapterName(String chapterName) {
        this.chapterName = chapterName;
    }
    public String getSectionName() {
        return sectionName;
    }
    public void setSectionName(String sectionName) {
        this.sectionName = sectionName;
    }
    */
}
package com.yd.wmsc.util;

import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Properties;

public class TestReflect {
    public static void main(String[] args) throws NoSuchFieldException{
        ContentWordBean content = new ContentWordBean();
        //topicbean.setChapter_id("123");
        List<String> fields=new ArrayList<String>();
        //fields.add("topic_id");
        //fields.add("node_id");
        getInsertSql(ContentWordBean.class,fields,"e_topic","");
        getSql(ContentWordBean.class,fields);
    }
    private static void getSql(Class className,List<String> suffixs) {
        try {
            //或得bean类
            BeanInfo beninfo = Introspector.getBeanInfo(className);
            //获得所有的属性描述
            PropertyDescriptor [] propertydescriptors = beninfo.getPropertyDescriptors();
            for(PropertyDescriptor pd:propertydescriptors){
                //获得读写方法
                System.out.println(pd.getName());
                System.out.println(pd.getReadMethod().getName());//读
                System.out.println(pd.getWriteMethod().getName());//写

            }
        } catch (IntrospectionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    /**通常需要将一个bean对象通过get方法插入到表中,本方法可以动态的生成sql语句
     * 将对象的sql语句生成
     * suffixs长度为空,则对所有的field进行插入
     * table为插入的表名
     * */
    public static String getInsertSql(Class className,List<String> suffixs,String table,String beanName) throws NoSuchFieldException{
        if("".equals(table)){
            System.out.println("表名为空");
            return null;
        }
        String sqlparam = "";
        String sql ="insert into "+table+"(sqlparam) values(";
        String bean = beanName;
        if("".equals(bean)){
            //获得类名并且将第一个字母转为小写
            bean = className.getSimpleName();;
            bean = bean.substring(0, 1).toLowerCase()+bean.substring(1);
        }
        //获得这个类的所有方法
        Method[] methods = className.getMethods();
        //是否取所有的fields
        if(suffixs.size() == 0){
            //获得私有属性
            Field[] fields = className.getDeclaredFields();
            for(Field field:fields){
                suffixs.add(field.getName());
            }

            //获得共有属性
            fields = className.getFields();
            for(Field field:fields){
                suffixs.add(field.getName());
            }
        }
        System.out.println(suffixs);
        for(String suffix:suffixs)
        {
            for(Method method:methods){
                //判断是否由get方法
                if(method.getName().toLowerCase().equals("get"+suffix)){
                    try {
                        //Field field = className.getDeclaredField(suffix);
                        if (method.getReturnType() == java.lang.String.class){
                            sqlparam += suffix+",";
                            sql +="‘\"+"+bean +"."+method.getName()+"()+\"‘,";
                        }else
                        if (method.getReturnType() == int.class)
                        {
                            sqlparam += suffix+",";
                            sql +="‘+"+bean +"."+method.getName()+"()+‘,";
                        }

                    } catch (SecurityException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        sql = sql.replace("(sqlparam)", "("+sqlparam.substring(0, sqlparam.length()-1)+")");
        sql = "\""+sql.substring(0, sql.length()-1)+");\"";
        System.out.println(sql);
        return sql;
    }
}
Clazz.getDeclaredFields 找到本类所有的成员
Clazz.getFields 找到本类及父类公有的成员
beninfo.getPropertyDescriptors()找到本类及父类所有的成员,但成员必须至少有get或set方法,并多一个class成员
 
时间: 2024-09-29 16:16:36

反射找到成员的相关文章

反射获取成员变量,并修改值

/* * 反射获取成员变量,并修改值 * Person类中的成员String name */ public class ReflectDemo5 { public static void main(String[] args) throws Exception{ Class c = Class.forName("cn.itcast.demo1.Person"); Object obj = c.newInstance(); //获取成员变量 Class类的方法 getFields() c

java 反射 - 获取成员变量的值.

通过反射,可以获取所有声明的成员变量(包括所有的),代码如下: package spt.test.src; public class Person { private String name = "pri_name"; public String id; } 运行测试: package spt.test; import java.lang.reflect.Field; import spt.test.src.Person; class ReflectionTest { @Suppres

00112_通过反射获取成员变量并使用

1.在反射机制中,把类中的成员变量使用类Field表示: 2.通过Class类中提供的方法获取成员变量: (1)返回一个成员变量 public Field getField(String name) 获取指定的 public修饰的变量 public Field getDeclaredField(String name) 获取指定的任意变量 (2)返回多个成员变量 public Field[] getFields() 获取所有public 修饰的变量 public Field[] getDecla

反射获取成员变量

Field Class.getField(String)方法可以获取类中的指定字段(可见的), 如果是私有的可以用getDeclaedField("name")方法获取,通过set(obj, "李四")方法可以设置指定对象上该字段的值, 如果是私有的需要先调用setAccessible(true)设置访问权限,用获取的指定的字段调用get(obj)可以获取指定对象中该字段的值 import java.lang.reflect.Constructor; import

asp.net 使用JQuery 调用Ashx 后面直接写方法名,通过反射找到对应的方法

using System.Reflection; public class Industry_Manager : IHttpHandler { HttpRequest gRequest = null; HttpContext gContext = null; HttpResponse gResponse = null; string func = string.Empty; string result = string.Empty; string pageUrl = string.Empty;

通过Class对象找到成员变量,方法和构造器

import java.lang.reflect.*; public class ClassDemo { public static void main(String[] args) { System.out.println("****************getClass()的例子*******************\n"); String name="john"; //获得name对象的Class实例 Class stringClass=name.getCl

Android(java)学习笔记:109:通过反射获取成员变量并且使用

1 package cn.itcast_03; 2 3 import java.lang.reflect.Constructor; 4 import java.lang.reflect.Field; 5 6 /* 7 * 通过发生获取成员变量并使用 8 */ 9 public class ReflectDemo { 10 public static void main(String[] args) throws Exception { 11 // 获取字节码文件对象 12 Class c = C

利用反射找到对应类的get方法,并且记录两个实体类的差异

public class DriverAmendUtil {        public static String findDifferent(String str,DataEntity oldClass,DataEntity newClass){        Map<String, String> valuesMap = updateValue();        Map<String, String> valueList = valueMap();        try {

c# 通过反射输出成员变量以及成员变量的值

/*** @Author rexzhao* 工具类 仅限于* public variable*/using System.Collections;using System.Collections.Generic;using System.Reflection;using System.Text;using UnityEngine;//#if !UNITY_ANDROID && UNITY_EDITOR #if __DEBUGpublic static class ObjectUtils{