field_fieldset - CSDN
精华内容
参与话题
  • java中field的理解

    千次阅读 2019-01-24 19:28:31
    看Java编程思想注解不清楚field的含义,导致后面一些获得getDeclaredFields范围不清楚,参考下面的博客我觉得挺清楚的。 http://www.ituring.com.cn/article/491755

    看Java编程思想注解不清楚field的含义,导致后面一些获得getDeclaredFields范围不清楚,参考下面的博客我觉得挺清楚的。

    http://www.ituring.com.cn/article/491755

    展开全文
  • Field类详解

    千次阅读 2017-12-27 20:24:37
    //AccessibleObject 类是 Field、Method 和 Constructor 对象的基类。  public class AccessibleObject implements AnnotatedElement {   /*   * 1、实现了AnnotatedElement对注解支持的相关方法...
    1. //AccessibleObject 类是 Field、Method 和 Constructor 对象的基类。  
    2. public class AccessibleObject implements AnnotatedElement {  
    3.     /*  
    4.      * 1、实现了AnnotatedElement对注解支持的相关方法  
    5.      * 2、提供访问控制   
    6.      /  
    7.     void setAccessible(boolean flag)   
    8.     设置该对象(Field,Constructor,Method)是否可访问  
    9.     boolean isAccessible()   
    10.     该对象是否可访问  
    11.     void setAccessible(AccessibleObject[] array, boolean flag)   
    12.     设置这一组对象(Field,Constructor,Method)是否可访问  
    13.   
    14. }  
    15. public interface Member{  
    16.    public static final int PUBLIC = 0//标识类或接口的所有已声明成员的集合。  
    17.    public static final int DECLARED = 1//标识类或接口的所有公共成员(包括继承成员)的集合。  
    18.      
    19.    public Class<?> getDeclaringClass();// 所在类  
    20.    public String getName(); //返回此 Member 表示的底层成员或构造方法的简单名称。  
    21.    public int getModifiers(); //作为整数返回由此 Member 所表示的成员或构造方法的 Java 语言修饰符。  
    22.    public boolean isSynthetic(); //如果此成员是编译器引入的,则返回 true;否则,返回 false。  
    23.   
    24. }  
    25. public final class Field extends AccessibleObject implements Member{  
    26.    
    27.    // 1.字段的设值和取值 ,对于静态属性,obj传null  
    28.     set(Object obj, Object value)   
    29.     setXX(Object obj, Object value) ,比如setInt,setBoolean  
    30.     Object get(Object obj)  
    31.     getXX(Object obj) ,比如getInt,getBoolean  
    32.       
    33.       
    34.     // 2.字段上注解的获取  
    35.     getDeclaredAnnotations()   
    36.     getAnnotation(Class<T> annotationClass);   
    37.       
    38.     // 3.字段类型  
    39.       Type getGenericType();  
    40.       Class<?> getType();  
    41.     // 4.字段修饰符  
    42.       int modifer=field.getModifiers();  
    43.       String modify = Modifier.toString(modifiers);  
    44.     // 5.字段名称  
    45.      String getName();  
    46. }  

    二、Field类实例

    [java] view plain copy
    1. package reflect;  
    2.   
    3. import java.lang.annotation.Annotation;  
    4. import java.lang.reflect.Field;  
    5. import java.lang.reflect.Modifier;  
    6. import java.lang.reflect.ParameterizedType;  
    7. import java.lang.reflect.Type;  
    8. import java.lang.reflect.TypeVariable;  
    9. import java.lang.reflect.WildcardType;  
    10. import java.util.Arrays;  
    11. import java.util.List;  
    12.   
    13. /** 
    14.  * @author zhangquanit 
    15.  */  
    16. public class FieldTest {  
    17.   
    18.     private int mInt; // 普通成员变量  
    19.   
    20.     public static String mStr; // 静态成员变量  
    21.   
    22.     @MyAnnotation  
    23.     private Object mObject; // 使用了注解的成员变量  
    24.   
    25.     private List<String> mList; // 泛型字段  
    26.   
    27.     public static void main(String[] args) throws Exception {  
    28.         FieldTest obj = new FieldTest();  
    29.         Class<? extends FieldTest> clazz = obj.getClass();  
    30.   
    31.         /* 
    32.          * 普通属性字段的设置和获取 
    33.          */  
    34.         Field normalField = clazz.getDeclaredField("mInt");  
    35.         setAccessible(normalField);  
    36.         String filedName=normalField.getName();//mInt  
    37.         normalField.set(obj, 100); // 设值  
    38.         int mIntValue = normalField.getInt(obj);// 取值 100;  
    39.   
    40.         /* 
    41.          * 静态属性字段的设值和获取 (obj传null) 
    42.          */  
    43.         Field staticField = clazz.getDeclaredField("mStr");  
    44.         setAccessible(staticField);  
    45.         staticField.set(null"static value");  
    46.         Object value = staticField.get(null);// static value  
    47.   
    48.         /* 
    49.          * 字段的枚举相关操作 (更多相关信息参照 我写的 Java注解) 
    50.          */  
    51.         Field annotationField = clazz.getDeclaredField("mObject");  
    52.         setAccessible(annotationField);  
    53.         Annotation[] declaredAnnotations = annotationField  
    54.                 .getDeclaredAnnotations();  
    55.         System.out.println(Arrays.toString(declaredAnnotations));  
    56.   
    57.         /* 
    58.          * 泛型字段 
    59.          */  
    60.         Field genericField = clazz.getDeclaredField("mList");  
    61.         setAccessible(genericField);  
    62.         Type genericType = genericField.getGenericType();// java.util.List<java.lang.String>  
    63.         Class type = genericField.getType(); // interface java.util.List  
    64.         getActualType(genericType); //Class类型: class java.lang.String  
    65.   
    66.     }  
    67.   
    68.     // 私有的变量,需要设置为可访问  
    69.     private static void setAccessible(Field field) {  
    70.         if (!field.isAccessible()) {  
    71.             field.setAccessible(true);  
    72.         }  
    73.     }  
    74.   
    75.     // 获取List中泛型的实际类型  
    76.     private static void getActualType(Type genericType) {  
    77.         if (genericType instanceof ParameterizedType) {  
    78.             ParameterizedType parameterizedType = (ParameterizedType) genericType;  
    79.             Type actualType = parameterizedType.getActualTypeArguments()[0];  
    80.             if (actualType instanceof TypeVariable) {// 泛型类型,比如T  
    81.                 TypeVariable typeVariable = (TypeVariable) actualType;  
    82.                 System.out.println("TypeVariable类型: " + typeVariable);  
    83.   
    84.             } else if (actualType instanceof WildcardType) {// 含通配符? 类型  
    85.                 WildcardType wildcardType = (WildcardType) actualType;  
    86.                 System.out.println("WildcardType类型: " + wildcardType);  
    87.   
    88.             } else if (actualType instanceof Class) { // 普通类对象  
    89.                 Class cls = (Class) actualType;  
    90.                 System.out.println("Class类型: " + actualType); // class  
    91.                                                                 // java.lang.String  
    92.             }  
    93.         }  
    94.     }  
    95.   
    96. }  
    展开全文
  • java反射--Field用法实践

    万次阅读 多人点赞 2018-08-07 16:32:54
    java反射中可用的方法有很多,如Class (反射的入口)、Method (成员方法)、Field (成员变量),而我想要实现的功能使用Field即可实现。 用法 Field是什么 Field是一个类,位于java.lang.reflect包下。在Java...

    背景

    在工作中,经常需要对特定对象转换成我想要的JSON对象,为了实现通用性想到用反射去实现这个过程。java反射中可用的方法有很多,如Class (反射的入口)Method (成员方法)Field (成员变量),而我想要实现的功能使用Field即可实现。

    用法

    Field是什么

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

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

    如何使用Field

    如何获取Field类对象

    一共有4种方法:

    • Class.getFields(): 获取类中public类型的属性,返回一个包含某些 Field 对象的数组,该数组包含此 Class 对象所表示的类或接口的所有可访问公共字段
    • getDeclaredFields(): 获取类中所有的属性(public、protected、default、private),但不包括继承的属性,返回 Field 对象的一个数组
    • getField(String name): 获取类特定的方法,name参数指定了属性的名称
    • getDeclaredField(String name): 获取类特定的方法,name参数指定了属性的名称

    Field 类对象常用方法

    • 获取变量的类型:

      • Field.getType():返回这个变量的类型
      • Field.getGenericType():如果当前属性有签名属性类型就返回,否则就返回 Field.getType()
      • isEnumConstant() : 判断这个属性是否是枚举类
    • 获取成员变量的修饰符
      • Field.getModifiers()  以整数形式返回由此 Field 对象表示的字段的 Java 语言修饰符
    • 获取和修改成员变量的值

      • getName() : 获取属性的名字

      • get(Object obj) 返回指定对象obj上此 Field 表示的字段的值

      • set(Object obj, Object value) 将指定对象变量上此 Field 对象表示的字段设置为指定的新值

    实践

    以工作中使用的代码为举例:

    //入参:request为原类型的对象,Sring[]为我想从request中保留的字段,我想要返回的类型为JSONObject
    public static JSONObject convertJson(Object request, String[] arr) {
        try {
            JSONObject result = new JSONObject();
            if (StringUtils.isNotBlank(request.toString())) {
                //第一步:获取操作类
                Class clazz = request.getClass();
                //第二步:获取此类的所有的公共(public)的字段,返回 Field 对象的一个数组
                Field[] fields = clazz.getFields();
                for (Field field : fields) {
                    //第三步:获取字段的名称
                    String fieldValue = field.getName();
                    if(ArrayUtils.contains(arr,fieldValue)){
                        //第四步:将字段名称和值进行存储
                        result.put(fieldValue,field.get(request));
                    }
                }
            }
            return result;
        } catch (Exception ex) {
            logger.error(ex.getMessage());
            return null;
        }
    }

    常见错误

    • set(Object obj, Object value) 时,新value和原value的类型不一致导致,如下:无法转换类型导致的 java.lang.IllegalArgumentException(注意:反射获取或者修改一个变量的值时,编译器不会进行自动装/拆箱,所以int 和Integer需手动修改
    • set(Object obj, Object value) 时,修改 final类型的变量导致的 IllegalAccessException。由于 Field 继承自 AccessibleObject , 我们可以使用 AccessibleObject.setAccessible() 方法告诉安全机制,这个变量可以访问即可解决,如field.setAccessible(true)。
    • getField(String name) 或getFields() 获取非 public 的变量,编译器会报 java.lang.NoSuchFieldException 错。

     

     

    展开全文
  • Field及其用法

    万次阅读 2017-11-13 16:33:28
    一、Field类代表一个属性的元数据信息。 二、获得Field 1、Field[] fs=c.getFields(); //获得公有属性(只能是公有的)/*/可以是父类的公有的属性 2、Field[] fs2=c.getDeclaredFields(); //获得所有属性(全部类型...

    一、Field类代表一个属性的元数据信息。

    二、获得Field

    1、Field[] fs=c.getFields();

    //获得公有属性(只能是公有的)/*/可以是父类的公有的属性

    2、Field[] fs2=c.getDeclaredFields();

    //获得所有属性(全部类型的修饰符属性均可获得)

    3、Field fs3=c.getField(String FieldName);

    //获得指定名字的公有属性(只能是公有的)

    4、Field fs4=c.getDeclaredField(String FieldName);

    //获得指定名字的属性(全部类型的修饰符的属性中指定名字)

    例子:

    public static void reflect(Object obj) throws NoSuchFieldException, SecurityException {
    Class<?> c= obj.getClass();
    System.out.println("它的名字是:"+c.getName());
    
    //获得公有属性
    Field[] fs=c.getFields();
    for(Field ff:fs) {
    System.out.println("\t它的属性:"+ff.getName());
    }
    
    System.out.println("----------------------");
    //获得所有属性
    Field[] fs2=c.getDeclaredFields();
    for(Field ff:fs2) {
    System.out.println("\t它的属性:"+ff.getName());
    }
    
    System.out.println("----------------------");
    //获得指定属性
    Field fs3=c.getField("empid");
    System.out.println("\t它的属性:"+fs3);
    
    //获得指定名字的所有属性
    System.out.println("----------------------");
    Field fs4=c.getDeclaredField("empsarlly");
    System.out.println("\t它的属性:"+fs4.getName());
    }



    三、Field类的方法

    1、String getName();获得属性名

    2、Class getType();获得属性类型

    3、获得访问修饰符

    (1)int getModifiers() ;通过一个数字来表示多个修饰符的组合。

    例子:

    Field[] fs2=c.getDeclaredFields();
    for(Field ff:fs2) {
    System.out.println("\t它的属性:"+ff.getName());
    System.out.println("\t\t"+ff.getModifiers());
    }

    (2)总结:public:         00001

              private:  00010

              protected: 00100

    4、Modifier代表修饰符

    提供一些用于处理修饰符的静态方法。

    (1) Modifier.isFinal(ff.getModifiers())返回boolean类型

    判断该修饰符中是否包含final

    (2) Modifier.toString(ff.getModifiers())

    对数字进行解码,打印出其中包含的各种修饰符

    5、getType()和getGenericType()的区别

    (1)首先是返回的类型不一样,一个是Class对象一个是Type的接口。

    (2)如果属性是一个泛型。从getType()只能得到这个属性的接口类型,但从getGenericType()还能得到这个泛型的参数类型。


    Field实例:

    // 插入操作
    public static void save(Object obj) {
    Class<?> c = obj.getClass();
    StringBuffer sql = new StringBuffer("insert into " + c.getSimpleName() + "(");
    StringBuffer sql_v = new StringBuffer("values(");
    Field[] fi = c.getDeclaredFields();
    for (int i = 0; i < fi.length; i++) {
    if (i != fi.length - 1) {
    sql.append(fi[i].getName() + ",");
    sql_v.append("?,");
    } else {
    sql.append(fi[i].getName() + ")");
    sql_v.append("?)");
    }
    }
    sql.append(sql_v);
    System.out.println(sql);
    Connection conn = CommonDao.getConnection();
    PreparedStatement ps = null;
    try {
    ps = conn.prepareStatement(sql.toString());
    for (int i = 0; i < fi.length; i++) {
    fi[i].setAccessible(true);
    try {
    ps.setObject(i + 1, fi[i].get(obj));
    } catch (IllegalArgumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IllegalAccessException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    ps.execute();
    System.out.println("执行成功!");
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } finally {
    close(ps);
    close(conn);
    }
    }
    












    展开全文
  • Field属性(域)

    千次阅读 2019-07-21 17:06:36
    Field是文档中的域,包括Field名和Field值两部分,一个文档可以包括多个Field,Document只是Field的一个承载体,Field值即为要索引的内容,也是要搜索的内容。 是否分词(tokenized) 是:作分词处理,即将Field值...
  • Java反射 Field类详解

    万次阅读 多人点赞 2018-05-21 21:20:30
    Field 提供有关类或接口的单个字段的信息,以及对它的动态访问权限。反射的字段可能是一个类(静态)字段或实例字段。
  • MySQL中函数field()的用法

    万次阅读 2018-05-04 11:59:51
    MySQL中的field()函数,可以用来对SQL中查询结果集进行指定顺序排序。函数使用格式如下:order by (str,str1,str2,str3,str4……),str与str1,str2,str3,str4比较,其中str指的是字段名字,意为:字段str...
  • 在SSM框架中出现Field error in object ‘xxx’ on field ‘XXX’: rejected value [];错误在ssm框架中,前端没有没有传值或者搜索条件为空时,传值时无法转换为int,会导致加载controller之前就报错,故应把属性...
  • 前端搜索条件为空时,value为“”,传值时无法转换为int,故应把属性...Field error in object 'xxx' on field 'XXX': rejected value []; codes [typeMismatch.XXX.xxx,typeMismatch.xxx,typeMismatch.int,typeMisma
  • 使用antd的Form组件setFieldsValue可能会出现You cannot set a form field before rendering a field associated with the value.警告,字面意义去看是说在 render之前设置了表单值的问题。 那么怎么解决呢 1、...
  • spring 注解注入bean 就需要把service实现类 加注解 @Service 否则报如题的错 粗心...
  • data.field.属性赋值

    万次阅读 2017-10-14 14:29:55
    console.log(data.field); data.field.testname="1,2,3,4";(testname是field中的某个属性比如:name,age,sex等) console.log(data.field); 第一次console:{interest: "0", open: "1", more: "1", file: "", ...
  • Unknown column '' in 'field list'解决方案

    万次阅读 2018-03-20 10:06:08
    今天在项目操作中突然遇到这个问题: Unknown column 'amount' in 'field list';  查了之后发现原来是对应的实体中注解的cloumn在表中不存在;表中加上对应字段后,就ok了;
  • "cannot be resolved or is not a field"问题解决

    万次阅读 热门讨论 2013-11-18 13:15:05
    在修改了资源文件后,出现“"cannot be resolved or is not a field",解决方法如下: 1. 删除R.java文件,这时,系统会重新生成一个R.java; 2. 删除java代码中的”import android.R“文件。 问题解决。
  • 一般这个问题出现在多表查询中,这个是由于参数'sp_id' 存在多表中,没有声明是哪一个的参数,解决为:表名 . 参数
  • 前几天在做项目的时候,使用antd做ui,在modal中使用form表单编辑相关信息,modal弹出的时候,form表单里始终不能回调渲染出页面上的信息,报错如标题,意思就是:你不能在页面未渲染之前就进行form表单的相关信息的...
  • [org.hibernate.engine.jdbc.spi.SqlExceptionHelper]SQL Error: 1054, SQLState: 42...[org.hibernate.engine.jdbc.spi.SqlExceptionHelper]Unknown column 'this_.CREATE_BY' in 'field list' [org.jeecgframewo...
  •   @TableField(exist = false) 注解加载bean属性上,表示当前属性不是数据库的字段,但在项目中必须使用,这样在新增等使用bean的时候,mybatis-plus就会忽略这个,不会报错...
  • 运行时报错Unsatisfied dependency expressed through field 'businessService'把网上所有可能出现的出错方式都挨着看了一遍,结果是因为 实现类里没加注解@Service@Transactional注解:@Transactionalhttps://...
  • 这个错误是说表中的这个字段不存在,而在检查SQL语句完全无误后,可以检查下表中的数据类型设置或者字符编码格式,比如我出现这个错误时,是因为我本身数据库使用的是gbk格式,但是后来我加了个字段是utf8编码格式的...
1 2 3 4 5 ... 20
收藏数 835,298
精华内容 334,119
关键字:

field