zoukankan      html  css  js  c++  java
  • 一个Bug的反思

    对输入数据判重,使用Map,将对象作为Key,使用map的containsKey方法来着重是否是重复记录。
    正常的处理流程:
    (1)将输入的数据封装成对象
    (2)判重,将没有重复的数据存储到map
    (3)对没有重复的数据,进行校验
    (4)将部分输入的数据,转换成数据库存储时的格式

    问题:因为对已经存储在map中的对象中的字段进行了修改,即使后面的输入的对象与前一个重复,判重就会失效。
    反思:
    这个逻辑的流程是:(1)得到输入--》(2)判重--》(3)将部分字段的值更改成数据库存储的值--》(4)持久化
    第三部,更改了对象的值,因为会导致判重的预期失效,见下例子

    import java.util.HashMap;
    import java.util.Map;
    
    /*2015-9-20*/
    public class MapDemo {
        public static void main(String[] args) {
            Map<Person, String> info = new HashMap<Person, String>();
            Person person = new Person("xiaoming", 1);
            info.put(person, person.getName());
            print(info, person);
            person.setSalary(2);
            System.out.println(String.format("Get a pay raise:%d to %d", 1, 2));
            print(info, person);
            person = new Person("xiaoming", 1);
            print(info, person);
        }
    
        private static void print(Map<Person, String> info, Person person) {
            System.out.println(String.format("get '%s' from '%s'.Result: '%s'", person, info, info.get(person)));
        }
    
    }
    
    class Person {
        private String name;
        private int salary;
    
        public Person(String name, int salary) {
            super();
            this.name = name;
            this.salary = salary;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getSalary() {
            return salary;
        }
    
        public void setSalary(int salary) {
            this.salary = salary;
        }
    
        @Override
        public String toString() {
            return "Person [name=" + name + ", salary=" + salary + "]";
        }
    
    }

    Output:

    get 'Person [name=xiaoming, salary=1]' from '{Person [name=xiaoming, salary=1]=xiaoming}'.Result: 'xiaoming'
    Get a pay raise:1 to 2
    get 'Person [name=xiaoming, salary=2]' from '{Person [name=xiaoming, salary=2]=xiaoming}'.Result: 'xiaoming'
    get 'Person [name=xiaoming, salary=1]' from '{Person [name=xiaoming, salary=2]=xiaoming}'.Result: 'null'
  • 相关阅读:
    学习笔记: yield迭代器
    学习笔记: 委托解析和封装,事件及应用
    学习笔记: MD5/DES/RSA三类加密,SSL协议解析
    学习笔记: Expression表达式目录树详解和扩展封装
    学习笔记: Expression表达式目录树详解和扩展封装
    学习笔记: IO操作及序列化
    数据类型转换
    短路运算(逻辑运算是短路运算中最常见的一种)
    清除浮动
    css初始化
  • 原文地址:https://www.cnblogs.com/softidea/p/4824376.html
Copyright © 2011-2022 走看看