精华内容
下载资源
问答
  • 看一段数据库中的表转化成用户可以看懂的数据,也就是把一些字段比如Date用ms存的,转化为'yyyy-MM-dd'这种格式,但是由于字段太多,所以利用Java反射机制自带的BeanUtils相关的方法来进行转化(要求两个类的属性名称相同...
    • 今天由于业务需要,看一段数据库中的表转化成用户可以看懂的数据,也就是把一些字段比如Date用ms存的,转化为'yyyy-MM-dd'这种格式,但是由于字段太多,所以利用Java反射机制自带的BeanUtils相关的方法来进行转化(要求两个类的属性名称相同),当然这个方法只支持基本数据类型,如Long,Integer,String,Short之类的转化,但是像Date类型就需要自己手动判断来转,这就出现了今天所遇到的坑

    • 先看下反射机制是如何获取类的方法的:

      Class clazz = object.getClass();
      clazz.getDeclaredFields();
      clazz.getFields()
      

      ​ 通过getClass()方法来获取类的定义信息,通过定义信息再调用getFields()方法来获取类的所有公共属性,或者调用getDeclaredFields()方法来获取类的所有属性,包括公共,保护,私有,默认的方法,但是这里有一点要注意的是这个方法只能获取当前类里面显示定义的属性,不能获取到父类或者父类的父类及更高层次的属性的,所以我们要想获取类的所有属性,还要获取父类的属性:

      public static Field[] getAllFields(Object object){
        Class clazz = object.getClass();
        List<Field> fieldList = new ArrayList<>();
        while (clazz != null){
          fieldList.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields())));
          clazz = clazz.getSuperclass();
        }
        Field[] fields = new Field[fieldList.size()];
        fieldList.toArray(fields);
        return fields;
      }
      

      ​ 这个方法通过while循环及getSuperClass()方法获取当前类的父类再进行getDeclaredFields()即可,注意这个方法返回的是一个Field数组,然后如果我们想要把这些属性拼接到一起,当然是使用链表更方便一些,利用Arrays.asList()方法将数组转化为链表,注意:这个方法返回的是一个List<>也就是抽象列表,所以要将其再用ArrayList初始化一次得到的列表才可变,否则得到的是一个不可变的列表.

      ​ 然后我们再利用列表的toArray()方法将列表转为数组,注意:这里又有一个坑,这个方法提供了两种实现:

      Object[] toArray();
      <T> T[] toArray(T[] a);
      

      ​ 第一种无参,但注意,返回值类型为Object数组类型,直接这么写肯定会报错,但是如果强制转换为需要的类型,则在运行时会抛这样一个异常:

       
      异常信息

      ​ 程序会告诉你无法这么转换,所以这里要注意

      ​ 第二种的参数就填你要转换的数组就可以,但是他要求数组的长度是等于链表的长度的,否则会编译不通过,所以得到链表之后在初始化数组即可

    • 然后这里在测试时导师提到了一个点就是循环依赖的问题,担心while会跳不出来,但是这里其实跟属性的具体类型是无关的,所以不会出现这个问题,但是就顺便了解了下循环依赖的相关概念,比如我定义两个类:

      class ClassA {
          int a;
          ClassB ab;
          public ClassA(){
              ab = new ClassB();
          }
      }
      class ClassB extends ClassA {
          int b;
          ClassA ba;
      
          public ClassB() {
              this.ba = new ClassA();
      }
      

      乍一眼看上去有很大问题嘛,怎么A是B的父类,A里面还有一个属性是B类的,其实这个问题跟继承关系也不大,只不过继承关系会让人印象更深刻,因为这段代码编译是可以通过的,那么我们来实例化一个B类看看会发生什么:

       
      异常信息

      接下来基本都是这样的情况了,java抛出了栈溢出,从结果中也可以想出这个问题,即A的属性引用了B类,而B的属性又引用了A类,这使得在B类实例化时去初始化A,A又初始化B,就这么陷入了一个死循环,最终导致程序栈溢出,所以我们在实际编码过程中要千万注意这种情形,如果发生在业务中,则是巨大的隐患存在.



    作者:xdlkc
    链接:https://www.jianshu.com/p/6fe3e0e185ac
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    转载于:https://www.cnblogs.com/pangguoming/p/11230569.html

    展开全文
  • C#多线程编程 http://www.cnblogs.com/luxiaoxun/p/3280146.html DLL 的编写,导出函数 http://blog.csdn.net/hanyujianke/article/details/8622041/***********************... 反射获取对象的属性信息 Type T = o

    C#多线程编程
    http://www.cnblogs.com/luxiaoxun/p/3280146.html
    DLL 的编写,导出函数
    http://blog.csdn.net/hanyujianke/article/details/8622041

    /********************************************/
    反射获取对象的属性信息
    Type T = obj.GetType();//其中obj为一个类的对象
    PropertyInfo[] infos = T.GetProperyies();//info里面保存了obj对象的各个属性信息
    foreach(PropertyInfo info in infos)//info里面是某一个属性
    {
    //获取该属性具有的特性,Atts实际上是一个特性数组,里面包含了该属性的所有特性
    var Atts = propertyInfo.GetCustomAttributes(true);
    //获取特性的类型
    Type AttType =Atts [i].GetType();//或者获取它的名字 Atts [index].GetType().Name
    //Atts [i]是一个object类型,需要强制类型转换才能,如:
    XmlAttribute xAtt = (XmlAttribute)Atts [i]
    //然后就可以获取该属性的该特性中的值了
    string eleName = xAtt.ElementName;
    /*******获取属性的值**************/
    object propertyValue = propertyInfo.GetValue(obj, null);//你得知道它是什么类型,再强制类型转换

    }

    展开全文
  • 遍历对象的属性,获取对象属性,包括自有属性、继承自原型的属性、不可枚举的属性

    遍历对象的属性,包括自有属性、继承自原型的属性、不可枚举的属性

    1.for in

    主要用于遍历对象的可枚举属性,包括自有属性继承自原型的属性

    var obj = {"name":"tom","sex":"male"};
    
    Object.defineProperty(obj, "age", {value:"18", enumerable:false});//增加不可枚举的属性age
    
    Object.prototype.protoPer1 = function(){console.log("name is tom");};//通过原型链增加属性,为一个函数
    
    Object.prototype.protoPer2 = 2;通过原型链增加属性,为一个整型值2
    
    console.log("For In : ");
    
    for(var a in obj){
        console.log(a);
    }
    
    //For In : 
    // name
    //sex
    //protoPer1
    //protoPer2
    

    2、Object.keys

    此方法返回一个数组,元素均为对象自有可枚举的属性
    Object.keys主要用于遍历对象自有的可枚举属性,
    不包括继承自原型的属性和不可枚举的属性。

    var obj = {"name":"tom","sex":"male"};
    
    Object.defineProperty(obj, "age", {value:"18", enumerable:false});//增加不可枚举的属性age
    
    Object.prototype.protoPer1 = function(){console.log("name is tom");};//通过原型链增加属性,为一个函数
    
    Object.prototype.protoPer2 = 2;通过原型链增加属性,为一个整型值2
    
    
    console.log(Object.keys(obj));
    
    
    //["name", "sex"]
    

    3、Object.getOwnPropertyNames

    Object.getOwnProperty主要用于返回对象的自有属性,
    包括可枚举和不可枚举的属性,不包括继承自原型的属性。

    var obj = {"name":"tom","sex":"male"};
    Object.defineProperty(obj, "age", {value:"18", enumerable:false});//增加不可枚举的属性age
    
    Object.prototype.protoPer1 = function(){console.log("name is tom");};//通过原型链增加属性,为一个函数
    
    Object.prototype.protoPer2 = 2;通过原型链增加属性,为一个整型值2
    
    console.log("Object.getOwnPropertyNames: ");
    
    console.log(Object.getOwnPropertyNames(obj));
    
    //["name", "sex","age"]
    

    4.Object.getOwnPropertySymbols()遍历不可枚举属性

    Symbol不可枚举。

    Object.getOwnPropertySymbols()可以获取指定对象的所有Symbol属性名。

    var obj = {};
    var a = Symbol('a');
    var b = Symbol('b');
    
    obj[a] = 'kon';
    obj[b] = 'chan';
    
    var objectSymbols = Object.getOwnProperySymbols(obj);
    
    objectSymbols
    //[Symbol(a),Symbol(b)]
    

    5. Reflect.ownKeys

    Reflect.ownKeys方法可以返回自身所有类型的键名,不包括继承自原型的属性。

    let obj = {
      [Symbol('my_key')]:1,
      enum:2,
      nonEnum:3
    };
    
    Reflect.ownKeys(obj)
    //[Symbol(my_key),'enum','nonEnum']
    

    本文链接:https://blog.csdn.net/qq_39903567/article/details/114991078

    展开全文
  • 将JavaBean对象的全部属性包括父类属性)存放于map中的方法
    	/**
    	 * JavaBean对象转换为Map
    	 * @param obj
    	 * @return
    	 */
    	public static Map<String, Object> convertObjToMap(Object obj){
    		Map<String,Object> reMap = new HashMap<String,Object>();
    		if (obj == null) 
    			return null;
    		try {
    			Class<?> objClass = obj.getClass();
    			while(objClass != null){
    				Field[] fields = objClass.getDeclaredFields();
    				for(int i=0;i<fields.length;i++){
    					try {
    						Field f = objClass.getDeclaredField(fields[i].getName());
    						f.setAccessible(true);
    						Object o = f.get(obj);
    						reMap.put(fields[i].getName(), o);
    					} catch (NoSuchFieldException e) {
    						e.printStackTrace();
    					} catch (IllegalArgumentException e) {
    						e.printStackTrace();
    					} catch (IllegalAccessException e) {
    						e.printStackTrace();
    					}
    				}
    				objClass = objClass.getSuperclass();
    			}
    		} catch (SecurityException e) {
    			e.printStackTrace();
    		} 
    		return reMap;
    	}


    
    
    展开全文
  • 函数可以是对象的属性 如果一个函数作为一个对象的属性保存 那么我们称这个函数叫做这个对象的方法 调用函数就是调用这个函数的方法(method) var obj = { name:"叮当", age:"123", address:function(){ ...
  • //选择需要查询属性的对象 Object object=new Object(); //获取object类定义信息,然后通过反射访问其全部信息. Class clazz=object.getClass(); //新建一个list<Field>集合把对象里所有属性放进去(包括父类...
  • 遍历对象的属性

    2017-12-10 17:32:51
    for/in可以将在循环体中遍历对象中可枚举的属性包括继承和自有属性),对象继承的内置方法不可枚举。var p ={name:"jack",age:23,sex:"boy"} var o = {sex:"girl",hobby:"html"}1.将p可枚举的属性复制到o中,并且...
  • 因为此时对象已经被实例化,所以在项目中通常会用反射获取Field从而判断该属性值是否为null,也就是常说判断对象中所有属性 不为null,本文讲讲我在项目中利用反射来判断遇到问题和一些坑 编写工具类解决...
  • //判断该对象是否: 返回ture表示所有属性为null 返回false表示不是所有属性都是null //子类对象判读为空不包括父类字段 public static boolean isAllFieldNull(Object obj) throws Exception{ Class cla = ...
  • 需要将Object对象里面的属性和值转化成Map对象,包括嵌套类型,这里我是往已有的map赋值 工具类 import com.alibaba.fastjson.JSONObject; import org.apache.commons.lang3.StringUtils; import org.springframework....
  • js中复制对象的属性值给新的对象

    千次阅读 2019-07-05 17:10:32
    我们有一个对象,且包含很多属性值和方法,但是我们想把它内部属性复制给一个新的对象时,我们如何去做呢? 你可能会说直接 a = b就可以了...如下,有一个circle对象,其中包括一个属性值,一个属性方法 const...
  • Js遍历对象的属性

    千次阅读 2018-06-05 11:32:13
    ES6一共有5中方法可以遍历对象的属性 for...in for...in循环遍历对象自身和继承的可枚举属性(不含Symbol属性)。 Object.keys(obj) Object.keys()返回一个数组,包括对象自身的(不含继承的)可枚举属性(不含Symbol...
  • getDeclaredFields() :该方法能获取到本类的所有属性,包括private,protected和public,但不能获取到继承的父类的属性。 getFields():既能获取本类的属性也能得到父类的属性,但仅仅能获取public修饰的字段。 ...
  • 相同点:都是获取对象的属性 不同点: 1 Object.keys()函数获取对象自身可枚举属性,属性包括可枚举的属性,不包括不可枚举的属性和Symbol 属性 2 Object.getOwnPropertyNames()函数获取对象的所有自身属性的属性,...
  • javascript中对象的属性的特性 1.ES5的属性特性包括下面六个: configurable: 表示能否通过delete来删除属性从而重新定义属性,能够修改属性的特性,默认为trueenumberable: 表示是否能通过for-in循环返回属性。...
  • 1. 遍历 json 对象的属性 //定义json对象 var person= { name: 'zhangsan', pass: '123', fn: function(){ alert(this.name+"的密码="+this.pass); } } //遍历person属性包括方法,如果不想显示出方法,...
  • 输出最大值对象所在索引,只需要数组再取一下就可以了。 letlist=[ {id:1,name:'jack'}, {id:2,name:'may'}, {id:3,name:'shawn'}, {id:4,name:'tony'}, ] leta=Math.max.apply(Math,list.map((item,...
  • 结论:字面量方式创建的对象和构造函数创建的对象都可以用delete关键字删除 1.字面量方式 var bonly={ name:'bonly', age:"18", weight:'70kg' }; for (var k in bonly) { if(k=='age'){ delete bonly[k]; } }...
  • 代码: let person = {isHuman: true} let user = { name: 'john', age: 17, date: new Date(), date1: null, order: { id: 123, price: '19yuan' } } user.__proto__ = person... //指定对象的原型 func...
  • 一、什么是对象?... 对象是无序属性的集合,属性包括:基本数据类型、对象或者函数。 二、创建对象的方式?  1、创建一个实例,如:  var obj=new Object();  obj.name="XXXX";  obj.color="red
  • js目前没有一个明确的方法去判断对象是否存在,尤其是出现多级属性(对象)的情况,一旦一个不存在的属性跨级取,就会报错“undefined”,因此考虑封装一个通用的方法去专门检测: //如果存在属性返回true,...
  • 对象属性的遍历获取

    2021-03-25 10:53:13
    js对象的属性遍历,通常使用的方法有: 1、for…in 可查询到对象自身和原型上的所有可枚举属性; 2、Object.keys() 返回一个数组,包含了对象自身所有的可枚举属性, 不包括symbols属性; 3、Reflect.ownkeys() 返回...
  • 枚举对象的属性

    2019-08-27 23:49:50
    循环将遍历对象本身的所有可枚举属性,以及对象从其构造函数原型中继承的属性(更接近原型链中对象的属性覆盖原型属性)。 语法:for (var 变量 in 对象){ ... } 对象中有几个属性(包括继承自其构造函数的...
  • 一些情况下,我们需要知道对象的属性是原型的还是实例的,如果看代码的话比较繁琐,下面讲解下如何可以直接判断 1. hasOwnProperty()函数用于指示一个对象自身(不包括原型链)是否具有指定名称...
  • 对象的属性分为两种:数据属性和访问器属性,也就是是否可枚举。 对象属性分为原型属性和实例属性。 原型属性是定义在对象的原型(prototype)中的属性,而实例属性是添加的新属性。 Obejct.keys(obj),返回一个数组...
  • ES6 一共有 5 种方法可以遍历对象的属性。 (1)for...in for...in循环遍历对象自身的和继承的可枚举属性(不含 Symbol 属性)。 (2)Object.keys(obj) Object.keys返回一个数组,包括对象自身的(不含继承的...
  • Python打印对象的全部属性

    万次阅读 2019-07-24 16:28:09
    但是不同对象的属性名都不一样,结构也不同,无法写一个代码来实现。然后我找到了__dict__,使用这个属性,可以动态获取到对象的所有属性,不包括公用属性。    通过__dict__,就可以动态的获取到对象的全部...
  • 构建Xhr对象的属性和方法 发出HTTP请求 通过Xhr对象的方法接收服务器回传的数据 xhr对象属性/方法 onreadystatechange 指向一个回调函数,当页面加载状态发生改变时调用 xhr.onreadystatechange=...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,822
精华内容 7,528
关键字:

对象的属性包括