精华内容
下载资源
问答
  • Field常用方法Field获取实体类的属性名和属性值实现步骤输出结果 Field是什么? Field是一个类,位于java.lang.reflect包下。在Java反射中Field类描述的是类的属性信息,功能包括: 获取当前对象的成员变量的类型 对...

    Field是什么?

    Field是一个类,位于java.lang.reflect包下。在Java反射中Field类描述的是类的属性信息,功能包括:

    • 获取当前对象的成员变量的类型
    • 对成员变量重新设值

    Field常用方法

    getType(): 获取属性声明时类型对象(返回class对象)

    getGenericType() : 返回属性声的Type类型

    getName() : 获取属性声明时名字

    getAnnotations() : 获得这个属性上所有的注释

    getModifiers() : 获取属性的修饰

    isEnumConstant() : 判断这个属性是否是枚举类

    isSynthetic() : 判断这个属性是否是 复合类

    get(Object obj) : 取得obj对象这个Field上的值

    set(Object obj, Object value) : 向obj对象的这个Field设置新值value

    Field获取实体类的属性名和属性值

    实现步骤

    1. 获取实体类 返回的是一个数组 数组的数据就是实体类中的字段
    2. 添加setAccessible()因为的字段是用private修饰的
    3. 输出属性名和属性值
     User user = new User();
     //获取实体类 返回的是一个数组 数组的数据就是实体类中的字段
     Field[] fields = user.getClass().getDeclaredFields();
        for (int i = 0; i < fields.length; i++) {
          //有的字段是用private修饰的 将他设置为可读
          fields[i].setAccessible(true);
          try {
            // 输出属性名和属性值
            System.out.println("属性名"+fields[i].getName()+"-----属性值"+fields[i].get(user));
            catch (IllegalAccessException e) {
               e.printStackTrace();
            }
        }
    

    输出结果

    在这里插入图片描述

    梦想也许在今天无法实现,但重要的是,它在你心里。重要的是,你一直在努力,加油!!!

    展开全文
  • Apache POI是Apache软件基金会开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写功能。 结构: HSSF - 提供读写Microsoft Excel格式档案功能。 XSSF - 提供读写Microsoft Excel ...

    首先介绍POI:
    Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
    结构:
    HSSF - 提供读写Microsoft Excel格式档案的功能。
    XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。
    HWPF - 提供读写Microsoft Word格式档案的功能。
    HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
    HDGF - 提供读写Microsoft Visio格式档案的功能。
    一些基本的读取excel,把数据导出到excel的创建文件和为表格填充数据都可以查看:
    百度百科:https://baike.baidu.com/item/POI/8886826
    这里讲一下如何封装一个方法传入一个任意的list集合,然后根据该类的属性动态生成集合所有属性的excel数据。

    然后说一下反射:这里用到的就是通过反射在运行时动态获取传来的类的属性值,主要用到两个jar包:
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    主要的方法就是获取到运行时加载进内存的类的属性名:class.getDeclaredFields()方法,以及该类声明的方法;
    class.getMethod();
    一下献上源码:

    package com.nms.common;
    
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFCellStyle;
    import org.apache.poi.hssf.usermodel.HSSFFont;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    
    import java.awt.Font;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    import java.text.Format;
    import java.text.SimpleDateFormat;
    
    public class ClassUtil {  
       /** 
        * @Description:将一个类的所有声明属性和值存入map(属性值为int型时,0时不加入, 
        * 属性值为String型或Long时为null和“”不加入) 
        * @param Object object 是需要将其所有声明属性和值存入单个map的对象
        * @Date:2018/3/20
        * @return 属性名和值对应的map
        */  
       public static Map<String, Object> setConditionMap(Object obj){  
           Map<String, Object> map = new HashMap<String, Object>();  
           if(obj==null){  
               return null;  
           }  
          try {
             //获取该类的所有声明的属性的名字
             Field[] fields = obj.getClass().getDeclaredFields();
              //循环遍历以属性名作为key以boject的get方法获取的值作为value存入map
             for(Field field : fields){  
                  String fieldName =  field.getName(); 
                  if(getValueByFieldName(fieldName,obj)!=null)  
                      map.put(fieldName,  getValueByFieldName(fieldName,obj));  
              }  
            } catch (Exception e) {
                // TODO: handle exception
                System.out.println(e);
            }
           return map;     
       }  
       /** 
        * 根据属性名获取该类此属性的值 
        * @param fieldName 
        * @param object 
        * @return get方法的返回值
        */  
       private static Object getValueByFieldName(String fieldName,Object object){  
        //拼接get方法
        String firstLetter=fieldName.substring(0,1).toUpperCase();  
          String getter = "get"+firstLetter+fieldName.substring(1);  
          try {  
            //从实体类中获取该get方法
             Method method = object.getClass().getMethod(getter, new Class[]{});
             //利用该实体类对象执行该get方法
             Object value = method.invoke(object, new Object[] {});  
             //如果是时间格式化
             if(value.getClass().equals(Date.class)){
                Date date =  new Date(((Date)value).getTime());
                SimpleDateFormat time=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
                return time.format(date);
             }
             return value;  
          } catch (Exception e) {  
             return null;  
          }       
       } 
    
       /**成功打印出excel表格的方法
         * @Description: 根据数据集合以及要生成的表名和存储路径在该路径下生成数据集合导出的excel文件
         * @param: list 要导出的数据集合
         * @param: sheetName 要生成的excel sheet的名字集合
         * @param: path 要保存的文件路径
         * @Date:2018/3/20
         * */
        @SuppressWarnings("deprecation")
        public static void reportExport(List<?> list,String[] sheetName,String path){
            int size = list.size();
            //获取一个对象为填入表头提供信息
            Object object = list.get(0);
            //获取该类的所有声明即表头
            Field[] fields = object.getClass().getDeclaredFields();
            //每一行的列数
            int columnSize = fields.length;
          //在Excel工作簿中建一工作表,其名为缺省值。
            HSSFWorkbook workbook = new HSSFWorkbook();
            //如要新建一名为sheetName[0]的工作表
            HSSFSheet sheet = workbook.createSheet(sheetName[0]); 
            //在索引的位置创建行(根据记录数添加)  
            HSSFRow[] row = new HSSFRow[size];
            //每一行创建列(根据树形字段)
            HSSFCell[] cell = new HSSFCell[columnSize];
            //单元格式
            HSSFCellStyle cellStyle= workbook.createCellStyle();
            //字体
            HSSFFont font = workbook.createFont();
            font.setFontName("宋体");
            cellStyle.setFont(font);
            //存储列字段值最大值
            Map<String,Short> mapMax = new HashMap(); 
            //写入表头
            row[0] = sheet.createRow(0);
            for(int i=0;i<columnSize;i++){
                mapMax.put(fields[i].getName(), (short)3000); 
                cell[i] = row[0].createCell((short)i);
                cell[i].setCellType(HSSFCell.CELL_TYPE_STRING);
                cell[i].setCellStyle(cellStyle);
                cell[i].setCellValue(fields[i].getName());
            }
            //写入具体数据
            for(int j=1;j<size;j++){
                //根据类获得的属性名值相对的map
                Map<?, ?> map = ClassUtil.setConditionMap(list.get(j));
                row[j] = sheet.createRow(j);    
                for(int i=0;i<columnSize;i++){
                    cell[i] = row[j].createCell((short)i);
                    cell[i].setCellType(HSSFCell.CELL_TYPE_STRING); 
                    if(map.get(fields[i].getName())==null){
                        cell[i].setCellValue("");
                    } else {
                        cell[i].setCellValue(map.get(fields[i].getName()).toString());
                        //比较最大值并且更新
                        if(mapMax.get(fields[i].getName())>map.get(fields[i].getName()).toString().length())
                        mapMax.put(fields[i].getName(), (short)(map.get(fields[i].getName()).toString().length()*280+1000)); 
                    }   
                }
            }
            //设置列宽度
            for(int i=0;i<fields.length;i++){
                sheet.setColumnWidth((short)i, (short)mapMax.get(fields[i].getName()));
            }
            try {
                FileOutputStream outputStream = new FileOutputStream(path);
                workbook.write(outputStream);
                outputStream.flush();
                //操作结束,关闭文件  
                outputStream.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }    
        }
    }  
    
    
    

    !!!!!要注意的地方是
    1,传入的是list对象,要获取fields集合需要从中取出一个实例化的类然后再获取属性;
    2,class.getMethod方法区分有参数和无参数的区别,有参数的要加上参数的类型比如参数是String那么 class.getMethod(”setName”,String.class);无参数的可以用null也可以使用 new Class[]{}代替;
    3,method.invoke()方法是对获取的类的方法的一次执行,执行实例化的User类的无参数方法getName()的时候必须传出该实例化的User对象作为Object参数,否则getName()方法执行也获取不到结果,会返回NULl. //利用该实体类对象执行该get方法,即 Object value = method.invoke(object, new Object[] {}); 此处的Object要是实例化的一个具体的User.
    4,实现excel列宽度的自适应:在遍历列的头的时候维护一个Map存入每个属性的基本列宽为(short)3000,然后在填入数据的时候比较最长的一条记录的长度经过相应的计算我这边大概估计了一下用获得的value的值(short)(vakue*280+1000)就是最终的列宽度,最后在循环一下设置列宽度即可。

    测试 代码:

        @SuppressWarnings("deprecation")
        @Test
        public void test () throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {     
            List<User> list = userService.getUserList();
            String[] sheetName = {"用户"};
            ClassUtil.reportExport(list,sheetName,"d:user.xcl");
        }

    运行结果:
    这里写图片描述

    展开全文
  • 主要介绍了C#编程获取实体类属性名和值的方法,涉及C#实体类的定义、实例化、遍历等相关操作技巧,需要的朋友可以参考下
  • 在java中我们要获得实体类对象的属性,一般情况是将实体类中的属性私有化,然后再对外提供get()与set()方法,然后再获取实体类对象的属性的时候先把对象new出来,再用变量.get()的方法得到,如果想给某个属性赋值...

    在java中我们要获得实体类对象的属性,一般情况是将实体类中的属性私有化,然后再对外提供get()与set()方法,然后再获取实体类对象的属性的时候先把对象new出来,再用变量名.get()的方法得到,如果想给某个属性赋值则用变量名.set()的方法赋值。

    第一步,生成一个属性类:

    public class Student {

    //编号

    private int id;

    //姓名

    private String name;

    //年龄

    private int age;

    /**

    * 有参构造,可以通过生成一个Student类型的对象的时候直接赋值

    * @param id

    * @param name

    * @param age

    */

    public Student(int id, String name, int age) {

    this.id = id;

    this.name = name;

    this.age = age;

    }

    /**

    * 无参构造

    */

    public Student(){

    }

    public int getId() {

    return id;

    }

    public void setId(int id) {

    this.id = id;

    }

    public String getName() {

    return name;

    }

    public void setName(String name) {

    this.name = name;

    }

    public int getAge() {

    return age;

    }

    public void setAge(int age) {

    this.age = age;

    }

    }

    第二步:在其他类里通过生成一个Student类的对象来调用:

    //通过生成一个对象并用set方法赋值,get得到

    Student student = new Student();

    student.setId(1);

    student.setName("");

    student.setAge(18);

    //通过有参构造来赋值

    Student student1 = new Student(student.getId(),student.getName(),student.getAge());

    这里首先是给变量student赋值,然后又通过set方法拿到student的内部的各个属性值又通过有参构造的方式赋值给了student1。

    总结起来就是这样给实体类对象里的属性赋值或者得到实体类对象里的属性值。希望对大家有所帮助。

    另附一段没有单设属性类直接在一个类中赋值与获取的代码,刚入门的朋友可以看看,自己感觉有点麻烦不如单设属性类方便,大家自我斟酌吧。

    public class TestInstance {

    public class Product{

    public String name;

    public string age;

    public int count;

    public int number;

    }

    public static void main(String[] args) throws NoSuchMethodException,

    SecurityException, IllegalAccessException,

    IllegalArgumentException, InvocationTargetException {

    // TODO Auto-generated method stub

    Product model = new Product("sss", "11", 3, 4);

    Field[] field = model.getClass().getDeclaredFields(); // 获取实体类的所有属性,返回Field数组

    // 遍历所有属性

    for (int j = 0; j < field.length; j++) {

    String name = field[j].getName();

    name = name.substring(0, 1).toUpperCase() + name.substring(1); // 将属性的首字符大写,方便构造get,set方法

    String type = field[j].getGenericType().toString(); // 获取属性的类型

    if (type.equals("class java.lang.String")) { // 如果type是类类型,则前面包含"class ",后面跟类名

    Method m = model.getClass().getMethod("get" + name);

    String value = (String) m.invoke(model); // 调用getter方法获取属性值

    if (value == null) {

    m = model.getClass().getMethod("set" + name, String.class);

    m.invoke(model, "");

    }else {

    System.out.println(value);

    }

    }

    if (type.equals("class java.lang.Integer")||type.equals("int")) {

    Method m = model.getClass().getMethod("get" + name);

    Integer value = (Integer) m.invoke(model);

    if (value == null) {

    m = model.getClass().getMethod("set" + name, Integer.class);

    m.invoke(model, 0);

    }

    else {

    System.out.println(value);

    }

    }

    if (type.equals("class java.lang.Boolean")||type.equals("boolean")) {

    Method m = model.getClass().getMethod("get" + name);

    Boolean value = (Boolean) m.invoke(model);

    if (value == null) {

    m = model.getClass().getMethod("set" + name, Boolean.class);

    m.invoke(model, false);

    }

    else {

    System.out.println(value);

    }

    }

    if (type.equals("class java.util.Date")) {

    Method m = model.getClass().getMethod("get" + name);

    Date value = (Date) m.invoke(model);

    if (value == null) {

    m = model.getClass().getMethod("set" + name, Date.class);

    m.invoke(model, new Date());

    }

    else {

    System.out.println(value);

    }

    }

    if (type.equals("double")) {

    Method m = model.getClass().getMethod("get" + name);

    double value = (double) m.invoke(model);

    System.out.println(value);

    }

    }

    }

    }

    展开全文
  • 在java中我们要获得实体类对象的属性,一般情况是将实体类中的属性私有化,然后再对外提供get()与set()方法,然后再获取实体类对象的属性的时候先把对象new出来,再用变量.get()的方法得到,如果想给某个属性赋值...

    在java中我们要获得实体类对象的属性,一般情况是将实体类中的属性私有化,然后再对外提供get()与set()方法,然后再获取实体类对象的属性的时候先把对象new出来,再用变量名.get()的方法得到,如果想给某个属性赋值则用变量名.set()的方法赋值。

    第一步,生成一个属性类:

    public class Student {

    //编号

    private int id;

    //姓名

    private String name;

    //年龄

    private int age;

    /**

    * 有参构造,可以通过生成一个Student类型的对象的时候直接赋值

    * @param id

    * @param name

    * @param age

    */

    public Student(int id, String name, int age) {

    this.id = id;

    this.name = name;

    this.age = age;

    }

    /**

    * 无参构造

    */

    public Student(){

    }

    public int getId() {

    return id;

    }

    public void setId(int id) {

    this.id = id;

    }

    public String getName() {

    return name;

    }

    public void setName(String name) {

    this.name = name;

    }

    public int getAge() {

    return age;

    }

    public void setAge(int age) {

    this.age = age;

    }

    }

    第二步:在其他类里通过生成一个Student类的对象来调用:

    //通过生成一个对象并用set方法赋值,get得到

    Student student = new Student();

    student.setId(1);

    student.setName("");

    student.setAge(18);

    //通过有参构造来赋值

    Student student1 = new Student(student.getId(),student.getName(),student.getAge());

    这里首先是给变量student赋值,然后又通过set方法拿到student的内部的各个属性值又通过有参构造的方式赋值给了student1。

    总结起来就是这样给实体类对象里的属性赋值或者得到实体类对象里的属性值。希望对大家有所帮助。

    另附一段没有单设属性类直接在一个类中赋值与获取的代码,刚入门的朋友可以看看,自己感觉有点麻烦不如单设属性类方便,大家自我斟酌吧。

    public class TestInstance {

    public class Product{

    public String name;

    public string age;

    public int count;

    public int number;

    }

    public static void main(String[] args) throws NoSuchMethodException,

    SecurityException, IllegalAccessException,

    IllegalArgumentException, InvocationTargetException {

    // TODO Auto-generated method stub

    Product model = new Product("sss", "11", 3, 4);

    Field[] field = model.getClass().getDeclaredFields(); // 获取实体类的所有属性,返回Field数组

    // 遍历所有属性

    for (int j = 0; j < field.length; j++) {

    String name = field[j].getName();

    name = name.substring(0, 1).toUpperCase() + name.substring(1); // 将属性的首字符大写,方便构造get,set方法

    String type = field[j].getGenericType().toString(); // 获取属性的类型

    if (type.equals("class java.lang.String")) { // 如果type是类类型,则前面包含"class ",后面跟类名

    Method m = model.getClass().getMethod("get" + name);

    String value = (String) m.invoke(model); // 调用getter方法获取属性值

    if (value == null) {

    m = model.getClass().getMethod("set" + name, String.class);

    m.invoke(model, "");

    }else {

    System.out.println(value);

    }

    }

    if (type.equals("class java.lang.Integer")||type.equals("int")) {

    Method m = model.getClass().getMethod("get" + name);

    Integer value = (Integer) m.invoke(model);

    if (value == null) {

    m = model.getClass().getMethod("set" + name, Integer.class);

    m.invoke(model, 0);

    }

    else {

    System.out.println(value);

    }

    }

    if (type.equals("class java.lang.Boolean")||type.equals("boolean")) {

    Method m = model.getClass().getMethod("get" + name);

    Boolean value = (Boolean) m.invoke(model);

    if (value == null) {

    m = model.getClass().getMethod("set" + name, Boolean.class);

    m.invoke(model, false);

    }

    else {

    System.out.println(value);

    }

    }

    if (type.equals("class java.util.Date")) {

    Method m = model.getClass().getMethod("get" + name);

    Date value = (Date) m.invoke(model);

    if (value == null) {

    m = model.getClass().getMethod("set" + name, Date.class);

    m.invoke(model, new Date());

    }

    else {

    System.out.println(value);

    }

    }

    if (type.equals("double")) {

    Method m = model.getClass().getMethod("get" + name);

    double value = (double) m.invoke(model);

    System.out.println(value);

    }

    }

    }

    }

    展开全文
  • 获取实体类属性值为null的属性名

    千次阅读 2019-01-11 11:27:12
    在BeanUtils.copyProperties(Object source, Object target, String......下面我们来写个工具类获取实体类为null的属性数组: //忽略null值 public static String[] getNullpropertyName(Object sourc...
  •  在java中我们要获得实体类对象的属性,一般情况是将实体类中的属性私有化,然后再对外提供get()与set()方法,然后再获取实体类对象的属性的时候先把对象new出来,再用变量.get()的方法得到,如果想给某个属性...
  • C#获取实体类属性名和值 | 遍历类对象 遍历获得一个实体类的所有属性名,以及该类的所有属性的值 //先定义一个类: public class User {  public string name { get; set; }  public string gender...
  • 今天和app端对接口的时候,他希望我将MySQL查到的...下面使用反射机制获取类的属性名和属性值。实体类public class ResumePerCompanyWantVO{private BigDecimal startWage;private BigDecimal endWage;private Stri...
  • 遍历获得一个实体类的所有属性名,以及该类的所有属性的值 //先定义一个类: public class User {  public string name { get; set; }  public string gender { get; set; }  public string age { get; ...
  • 获取实体类属性名和值

    千次阅读 2015-11-12 22:04:19
    //先定义一个: public class User {  public string name { get; set; }  public string gender { get;...//实例化,并给实列化对像的属性赋值: User u = new User(); u.name = "ahbool";
  • 今天和app端对接口的时候,他希望我将MySQL查到的信息...下面使用反射机制获取类的属性名和属性值。 实体类 public class ResumePerCompanyWantVO{ private BigDecimal startWage; private BigDecimal e...
  • ...C#获取实体类属性名和值 | 遍历类对象 遍历获得一个实体类的所有属性名,以及该类的所有属性的值 //先定义一个类: public class User {  public string name { ge
  • //获取实体类里面所有名称、值、DESCRIPTION值 public string getProperties(T t) { string tStr = string.Empty; if (t == null) { return tStr; } System.Reflection.PropertyInfo[] properties = t.GetType()....
  • 转载连接:... //遍历获取类的属性及属性的值: public string getProperties(T t) {  string tStr = string.Empty;  if (t == null)  {  return tStr;  }  Syste
  • //根据字段获取其对应值,javaName属性名,obj实体类 public String getValByJavaName(String javaName,Object obj){ String firstLetter = javaName.substring(0, 1).toUpperCase(); String getMethodName =...
  • //通过EntityManager获取factory EntityManagerFactory entityManagerFactory = (你自己entityManager对象).getEntityManagerFactory(); SessionFactoryImpl sessionFactory = (SessionFactoryImpl)...
  • using System.Reflection;...//获得该类的Type foreach (PropertyInfo pi in t.GetProperties()){ var name = pi.Name;//获得属性的名字,后面就可以根据名字判断来进行些自己想要的操作 var value = pi.GetValue...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 489
精华内容 195
关键字:

获取实体类的属性名