精华内容
下载资源
问答
  • js中复制对象属性值给新的对象

    万次阅读 2019-07-05 17:10:32
    我们一个对象,且包含很多属性值和方法,但是我们想把它的内部属性复制给一个新的对象时,我们如何去做呢? 你可能会说直接 a = b就可以了。 no no no,这样两个对象其实指针指向的还是一个内存中的对象,当一个...

    我们有一个对象,且包含很多属性值和方法,但是我们想把它的内部属性复制给一个新的对象时,我们如何去做呢?

    你可能会说直接 a = b就可以了。

    no no no,这样两个对象其实指针指向的还是一个内存中的对象,当一个发生变化的时候,另一个也是变化的,这并不是我们想要的结果。

    那么,以三种方法来看看具体实现过程吧。

    如下,有一个circle对象,其中包括一个属性值,一个属性方法

    const circle = {
        radius: 1,
        draw() {
            console.log('draw');
        }
    };

    方法一:for in枚举对象

    通过循环初始对象,得到每一个key以及所对应的值,然后把它赋值给新的对象

    const newObj = {};
    
    for(let key in circle) {
        newObj[key] = circle[key];
    }

    方法二:对象合并方法:

    通过一个空对象和初始对象进行合并,赋值给新的对象

    const newObj = Object.assign({}, circle);

    方法三:es6扩展操作符

    通过扩展操作符,找到circle的每一个属性然后赋值给新的对象

    const newObj = { ...circle };

    结果:

    console.log(newObj)

    这样就完成了复制对象的值的操作。

    如有问题,请指出,接受批评。

    个人微信公众号:

    展开全文
  • 假设现在需求如下:比较2个相同类型的不同对象,找到这2个对象的不同的地方,并展示记录一下。当然说的是相互对应的属性啦。 带着这个需求,看下面的例子。(我写代码的都不嫌弃长,你看代码的就也别嫌弃咯。) ...

    假设现在有需求如下:比较2个相同类型的不同对象,找到这2个对象的不同的地方,并展示记录一下。当然说的是相互对应的属性啦。

    带着这个需求,看下面的例子。(我写代码的都不嫌弃长,你看代码的就也别嫌弃咯。)

    package com.lxk.test;
    
    import com.google.common.collect.Lists;
    import com.lxk.model.Car;
    import com.lxk.model.Dog;
    
    import java.beans.PropertyDescriptor;
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    import java.util.List;
    
    /**
     * Compare the difference between two objects
     * <p>
     * Created by lxk on 2017/3/12
     */
    public class CompareObject {
        public static void main(String[] args) {
            Dog dog1 = new Dog("大师兄的dog", true, true);
            Dog dog2 = new Dog("大师兄的dog", false, false);
            List<Dog> dogs = Lists.newArrayList();
            List<Dog> myDogs = Lists.newArrayList();
            dogs.add(dog1);
            myDogs.add(dog2);
            List<String> boys = Lists.newArrayList("tom", "jerry", "jack");
            //List<String> myBoys = Lists.newArrayList("tom", "jerry", "jack");//这行注释打开,下行代码注释掉,则boys属性就相同了
            List<String> myBoys = Lists.newArrayList("tom hanks", "gery", "pul");
            Car car1 = new Car("q7", 182, dogs, boys);
            Car car2 = new Car("a6", 152, myDogs, myBoys);
            contrastObj(car1, car2);
        }
    
        private static void contrastObj(Object obj1, Object obj2) {
            if (obj1 instanceof Car && obj2 instanceof Car) {
                Car pojo1 = (Car) obj1;
                Car pojo2 = (Car) obj2;
                List<String> textList = Lists.newArrayList();
                try {
                    Class clazz = pojo1.getClass();
                    Field[] fields = pojo1.getClass().getDeclaredFields();
                    for (Field field : fields) {
                        PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz);
                        Method getMethod = pd.getReadMethod();
                        Object o1 = getMethod.invoke(pojo1);
                        Object o2 = getMethod.invoke(pojo2);
                        String s1 = o1 == null ? "" : o1.toString();//避免空指针异常
                        String s2 = o2 == null ? "" : o2.toString();//避免空指针异常
                        //思考下面注释的这一行:会bug的,虽然被try catch了,程序没报错,但是结果不是我们想要的
                        //if (!o1.toString().equals(o2.toString())) {
                        if (!s1.equals(s2)) {
                            textList.add("不一样的属性:" + field.getName() + " 属性值:[" + s1 + "," + s2 + "]");
                        }
                    }
                } catch (Exception e) {
                    System.out.println(e.getMessage());
                }
                for (Object object : textList) {
                    System.out.println(object);
                }
            }
        }
    }
    


    代码里面使用的两个model,也是极为重要的。

    Car的bean如下:

    package com.lxk.model;
    
    import java.util.List;
    
    public class Car implements Comparable<Car> {
        private String sign;
        private int price;
        private List<Dog> myDog;
        private List<String> boys;
    
        public Car(String sign, int price) {
            this.sign = sign;
            this.price = price;
        }
    
        public Car(String sign, int price, List<Dog> myDog) {
            this.sign = sign;
            this.price = price;
            this.myDog = myDog;
        }
    
        public Car(String sign, int price, List<Dog> myDog, List<String> boys) {
            this.sign = sign;
            this.price = price;
            this.myDog = myDog;
            this.boys = boys;
        }
    
     //getter and setter
    
    }

    Dog的bean如下:

    package com.lxk.model;
    
    /**
     * 测试boolean属性的getter和setter
     * <p>
     * Created by lxk on 2016/12/23
     */
    public class Dog {
        private String name;
        private boolean isLoyal;//是忠诚的
        private boolean alive;//活蹦乱跳的
    
    
        public Dog(boolean isLoyal, boolean alive) {
            this.isLoyal = isLoyal;
            this.alive = alive;
        }
    
        public Dog(String name, boolean isLoyal, boolean alive) {
            this.name = name;
            this.isLoyal = isLoyal;
            this.alive = alive;
        }
    
        //getter and setter
    
        //@Override
        //public boolean equals(Object o) {
        //    if (this == o) return true;
        //    if (!(o instanceof Dog)) return false;
        //    Dog dog = (Dog) o;
        //    return Objects.equal(getName(), dog.getName());
        //}
        //
        //@Override
        //public int hashCode() {
        //    return Objects.hashCode(getName());
        //}
    }
    

    先不要在意,我为什么把Dog bean的hashcode和equal方法给注释啦先。

    如上代码的执行结果 图,如下:


    从代码的执行情况看,可以得到,我们要的不同的属性的名称,当然你是可以把这些sign price myDog  boys这些属性,再次转化成你要的文字。

    注意后面的对应的属性值。类型是String 或者int 或者List<String>这些类型,直接使用toString()方法就可以把他转化成字符串了,但是看到myDog属性,这个自定义对象的list的toString()的时候,却是两个地址,对,这个就是他们的内存堆地址吧。可以看到,2个集合所指向的引用是不一样的。


    现在,看第二种情况,就是把Dog bean里面的注释,打开。其他地方的代码不动。

    然后指向结果如下图:



    可以看到,现在 myDog属性的值,竟然一样啦。但是,我们可以清楚的看到,我们的两个Car对象里面包含的Dog对象是不一样的。只是,这2个Car对象的两个Dog对象的name属性是一样的,都是:大师兄的dog。

    因为,你在Dog bean里面已经重写了hashcode和equal两个方法,那么在new对象的时候,他就会只根据这个name属性去生成hashcode,他决定放在堆内存的什么位置。

    那么就算,在我们看起来,那两个Car对象里面的两个Dog对象是不同的,但是计算机内存却认为是相同的。而且,toString()方法得到的结果也是跟他的内存地址有关系的。所以,比较结果,就是一样的。

    这就是意外。

    在实际开发中,我们也会有这种情况,可能因为某种需要,我们把某个bean的hashcode和equal方法给重写了。就像我这里 的这个Dog类,但是这个类又在其他地方被使用了。他的不同也决定另外一个对象是不是相同的,就比如我要判断两个Car对象是不是相同的。用如上方法的话,那么就判断失败啦。

    怎么应对呢?一般,当你发现你判断失败了,多半是自己测试出来的,我表示我当时就是自己测试出来的,后来发现就是写入hashcode和equal方法的属性相同了,他才相同,就想到了这一点。那么就直接再重写下toString()方法,把你要比较的属性,都写在toString方法里面,这么一来。那个list类型的属性在toString之后就会变得不是内存地址啦

    下面是我重写了toString()方法的代码,以及又一次的执行结果。

        @Override
        public String toString() {
            return "Dog{" +
                    "name='" + name + '\'' +
                    ", isLoyal=" + isLoyal +
                    ", alive=" + alive +
                    '}';
        }



    这样,刚刚判断失败的地方,现在就完美的错过啦。


    最后,总结一下。

    要想搞明白这个,你得知道:

    1,为什么要重写 hashcode和equal,以及这2个方法的作用到底 是什么。

    2,正确重写hashcode和equal的姿势。上面的是可以预防空指针的哟。哦,虽然是还是这个guava的工具包里面的东西。

    (这个guava包这个方法被jdk1.7借鉴了,在java.util包里面也有这个方法,可以试一下)

    2,当然了,这个重点还是反射的简单应用,我上面的那个问题,只是自己试验出来的问题,算是扩展问题。

    关于代码里面的Lists 就是一个guava,Google的一个工具包,感兴趣的,可以查查,也是很涨姿势的。哦,也行你已经知道啦。




    展开全文
  • get_class_vars 获取类的公有属性及默认值(包含公有的静态属性),用来列举类的公有...获取对象的公有属性属性值(不包含公有的静态属性)。 ReflectionClass 如果想要获取对象的各类属性(public/protected/priv...

    get_class_vars

    获取类的公有属性及默认值(包含公有的静态属性),用来列举类的公有属性字段。

    get_object_vars

    获取对象的公有属性及属性值(不包含公有的静态属性)。

    ReflectionClass

    如果想要获取对象的各类属性(public/protected/private | static),就需要借助强大的反射类来完成了。 PHP 提供了 \ReflectionClass::class 可以帮助我们解析类的实例对象,通过 \ReflectionClass::getProperties方法获取对象所有的属性值。

    实例

    <?php
    
    class Foo
    {
        // 类常量
        const CLASS_NAME = "Foo";
    
        // 成员属性
        public $name;
    
        protected $sex = "female";
    
        private $age;
    
        // 类静态属性
        // php 的对象是可以访问类的 static 属性的
        // 但应该使用类的方式访问更为规范
        // const 属性只能通过类的方式访问
        public static $bar = "bar";
    
        public function __construct($name, $sex, $age)
        {
            $this->name = $name;
            $this->sex  = $sex;
            $this->age  = $age;
        }
    
        /**
         * 获取对象的属性字段及属性值
         * @param  [type]  $property_scope  属性域
         * @param  boolean $static_excluded 是否包含静态属性
         * @return array
         * @throws \ReflectionException|\Exception
         */
        public function getProperties($property_scope = null, $static_excluded = false)
        {
            // 校验反射域是否合法
            if (isset($property_scope) && !in_array($property_scope, [
                \ReflectionProperty::IS_STATIC,
                \ReflectionProperty::IS_PUBLIC,
                \ReflectionProperty::IS_PROTECTED,
                \ReflectionProperty::IS_PRIVATE,
            ])) {
                throw new Exception("reflection class property scope illegal!");
            }
    
            $properties_mapping = [];
    
            // 谈判官
            $classRef           = new \ReflectionClass($this);
            $properties         = isset($property_scope) ? $classRef->getProperties($property_scope) : $classRef->getProperties();
    
            foreach ($properties as $property) {
                // 为了兼容反射私有属性
                $property->setAccessible(true);
    
                // 当不想获取静态属性时
                if ($property->isStatic() && $static_excluded) {
                    continue;
                }
    
                // 将得到的类属性同具体的实例绑定解析,获得实例上的属性值
                $properties_mapping[$property->getName()] = $property->getValue($this);
            }
    
            return $properties_mapping;
        }
    }
    
    $foo = new Foo("big_cat", "male", 29);
    
    // 获取类的公有属性及默认值(包含静态属性)
    var_dump(get_class_vars(get_class($foo)));
    
    // 获取对象的公有属性及值(不包含类静态属性)
    var_dump(get_object_vars($foo));
    
    // 获取对象的静态属性
    var_dump($foo->getProperties(\ReflectionProperty::IS_STATIC));
    // 获取对象的公有属性 并排除静态属性
    var_dump($foo->getProperties(\ReflectionProperty::IS_PUBLIC, true));
    // 获取对象的保护属性
    var_dump($foo->getProperties(\ReflectionProperty::IS_PROTECTED));
    // 获取对象的私有属性
    var_dump($foo->getProperties(\ReflectionProperty::IS_PRIVATE));
    

    其他参考

    /**
     * 获取类的常量属性
     * @see https://www.php.net/manual/en/reflectionclass.getconstants.php
     */
    \ReflectionClass::getConstants()
    
    /**
     * 获取类的方法
     * @see https://www.php.net/manual/en/reflectionclass.getmethods.php
     */
    \ReflectionClass::getMethods()
    

    转载于:https://my.oschina.net/sallency/blog/3074736

    展开全文
  • mybatis在传入对象时查询得对象属性值为空 当我们将一个对象(在这里我使用的是User对象),将对象成功的传入到xml映射文件中并成功的返回了一个User对象,但是我发现对象的成功返回并没有将对象的属性成功的返回,...

    mybatis在传入对象时查询得对象属性值为空

    当我们将一个对象(在这里我使用的是User对象),将对象成功的传入到xml映射文件中并成功的返回了一个User对象,但是我发现对象的成功返回并没有将对象的属性值成功的返回,值都是null,于是我查阅资料有说是resultType和resultMap出现问题的,但我尝试后发现没有效果,后来我将我的User对象的实体类全部进行了改造,将属性名和数据库的表的字段名保持一致,问题解决。

     

    具体代码:

     

    欢迎关注我的微信公众号,更多内容将在微信公众号中发布:

    展开全文
  • 后端获取回来的数据,拿到部分数据添加到定义好的对象,发现打印对象是可以正常获取,...获取具体属性的时候报undefined,因为新增的不是响应式数据,所以 新增的属性名没有set和get,就没法获取该了。 解决 ...
  • /** * 根据属性名获取属性值 * */ private Object getFieldValueByName(String fieldName, Object o) { try { String firstLetter = fieldName.substring(0, 1).toUpperCase();
  • vue替换数组对象的某个属性值

    千次阅读 2019-10-30 16:17:26
    通过$set给某个属性从新赋值,具体参照官网https://cn.vuejs.org/v2/api/#vm-set data:[ {name: 'xxx', status: 0}, {name: 'xxx', status: 1}, {name: 'xxx', status: 0}, {name: 'xxx', status: 1}, ] data....
  • 做批量删除的时候,要确定数组对象中每一项中没有发布状态的,如果也就是判断releaseStatus字段没有为true的,只要一个为true就给出提示让撤回后再删除,如果没有发布中的直接删除,下面这句可以快速判断,...
  • 反射获取类或对象属性

    千次阅读 2019-05-08 18:36:30
    当我们需要通过属性名去获取具体接口中常量对应的时,或是要获取该接口中所有常量名和对应的键值对集合,显得有些麻烦或是无从下手,故这里封装一个通用的工具类来满足此类需求(扩展到类和对象中),做以下总结...
  • 在控制器转发的过程中,我们经常要将一些数据存到request中来进行参数传递,而我们通常将一些数据存到一个实体对象里面,这时就可以通过反射获取对象里面的属性属性值,并用循环语句将该对象属性值存到request...
  • Java基础知识面试题(2020最新版)

    万次阅读 多人点赞 2020-02-19 12:11:27
    原理是什么Java语言哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类何不同?Java应用程序与小程序之间那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的...
  • 由于有时会需求,需要判断人员信息是否修改,因为人员信息会很多属性,一个个的进行if else难免会崩溃。因此,本文通过反射来实现该功能。 正文 JAVA反射机制是在运行状态中,对于任意一个类,都能够...
  • js往对象数组里添加属性属性值

    千次阅读 2019-11-07 14:02:05
    其实我是这样理解对象数组的,不知道没有错,如错请大佬指正!...我就是这样理解的,数组对象就是普通数组罢了,只是存的东西不同(一个是对象,一个是)!如理解误,请指正!!!感谢 往javascript对象数...
  •  这个Apply 是个订单,里面含有一个商品的ID,我只要里面的商品ID转换成代码就是只要ArrayList 集合中对象某一属性,又不想一个个取一个个放入新的里面.看到一个博客java8之list集合中取出某一属性的方法里面的 List&...
  • java中判断对象属性值是否为空

    万次阅读 2017-02-17 08:57:07
    最近遇到后台接收的时候,需要对接收对象进行非空校验,第一时间想到的就是写一堆的if判断,但是仔细想了想,如果字段的属性太多,需要写大量的if判断,并且方法也不能够重用,所以,就搜索了相关资料看看没有...
  • 通过new实例化Student对象,得到对应的student 引用,再通过引用调用get方法获取到属性,定义一个属性引用,指向该对象属性具体的内存地址,然后通过引用修改属性的,代码的最后 并没有看到给对象属性set赋值的...
  • //filterParams({a:"",b:null,c:"010",d:123}) //Object {c: "010", d: 123} //var abc = { //a: 1, //b: 2, ...//这个方法不会影响原来的对象,而是返回一个新对象...
  • var arr= [{ id: 1, value: 1 }, {id: 2, value: 2}, { id: 3, value: 2 }, { id: 1, value: 10 } ], 数组中两个id为1的对象,对这个数组进行去重,并将...
  • 如何用js遍历对象数组及对象属性

    万次阅读 2018-12-10 22:50:11
    如何用js遍历对象数组及对象属性 条件:在Vue中objectList:[] 接收的后台数据是一个对象数组,对其进行遍历,得到某个具体的对象 for(var item=0;item&lt;this.objectList.length;item++){ //遍历对象数组,item...
  • 就是验证一个对象中的一个属性是否为空。 自己在网上也找到了很多大神给的答案,看到利用反射机制 public boolean checkObjFieldIsNull(Object obj) throws IllegalAccessException { boolean flag =...
  • 多层嵌套对象获取底层对象属性

    千次阅读 2018-01-07 20:00:09
    Map,List,Set,Page,自定义包装类等等,且包装层还嵌套层,如Map,Page,仅仅是通过反射获取这些包装之下实际Model就很花费精力,就想能不能将这些逻辑抽象出来,写个特定的工具类,能很方便的剥离这些外层,...
  • 如果一个元素满足条件,则表达式返回true, 剩余的元素不会再执行检测 如果没有满足条件的元素,则返回false 二、every():用于检测数组所有元素是否都符合指定条件 every和some正好相反: 如果数组中检测到一...
  • ES6+ | 对象属性与方法简写

    千次阅读 2019-03-20 14:52:12
    文章目录对象字面量简写属性简写方法简写注意应用坑点 对象字面量 在JavaScript中,对象字面量是创建对象是一种简洁方式,形式如下: let a = 3 let obj = { a: a, b: 'b', func: function () { console.log...
  • vue修改对象属性值后页面不重新渲染

    万次阅读 多人点赞 2017-12-15 16:20:23
    最近项目在使用vue,遇到几次修改了对象属性后,页面并不重新渲染,场景如下: HTML页面如下: {{ item.name}} 编辑 js部分如下:
  •  //输出list对象属性的第一种方式,遍历list,得到list中封装的对象,再通过对象获得属性  while (it.hasNext()) {  user = (User)it.next();  System.out.println("---------"+user.getName());  System...
  • 时候会遇到不想创建类对象,还需要解析传过来的未知对象的json数据,我用到的例子简单记录一下。   List list =(List) entity.getEntity();//需要解析的list数据   list的: [{ZSTIME=2017-12, KJYGM=...
  • 由于项目需要,需要从object对象中获得对应的实体类的属性属性值,研究了半天,终于实现。介绍如下:  注:object为检索数据库后获得的object对象  Object object = super.selectByEntityId(Util....
  • 在处理业务逻辑时,偶尔会这样的需求:对象A已经实例化,但是一些格式上的不符合标准,对象B没有具体属性值但是格式却符合标准。 一般这样的情况会出现在DTO对象与VO对象之间。DTO需要实现序列化才可以传输。...
  • Python帮助函数调试函数 用于获取对象属性属性值刚接触Python,上篇 《Python入门》第一个Python Web程序——简单的Web服务器 中调试很不方便,不知道对象具体有什么属性,包含什么,所以写了一个函数,用于...
  • //进行排序的实体对象 package com.compile; public class User {  String name;  String age;    public User(String name,String age){  this.name=name;  this.age=age;  }

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 741,140
精华内容 296,456
关键字:

对象的属性必须有具体值