Findbugs中的BUG:May expose internal representation by returning reference to mutable object

一个简单的类A:

@Data
public class A {
    
    
    private Date time;
}

现在为类A中的time属性赋值,测试代码如下:

public static void main(String[] args) {
    
    
        A a = new A();
        Date date = new Date();
        a.setTime(date);
        System.out.println(a.getTime());
        date.setTime(6);
        System.out.println(a.getTime());
    }

测试结果:
在这里插入图片描述
可以发现一旦data变量被修改后,就会影响到原来赋给变量A的time属性值。这明显是有问题的。

解决方法

修改下取时间的方式,如下:

 public static void main(String[] args) {
    
    
        A a = new A();
        Calendar date = Calendar.getInstance();
        a.setTime(date.getTime());
        System.out.println(a.getTime());
        date.set(Calendar.YEAR, 6);
        System.out.println(date.getTime());
        System.out.println(a.getTime());
    }

测试结果:
在这里插入图片描述
可以发现此时即使data变量被修改,也不会影响到原来赋给变量A的time属性值。

猜你喜欢

转载自blog.csdn.net/weixin_38106322/article/details/111241832