@Data注解遇到的坑

@Data
public class A {

    private int id;
    private String name;

}
package com.example.demo2.config;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

class Solution {

    public static void main(String[] args) {
        A a=new A();
        a.setId(1);
        a.setName("张三");
        A b=new A();
        b.setId(1);
        b.setName("张三");

        System.out.println(a.hashCode());
        System.out.println(b.hashCode());

        Set<A> set=new HashSet<A>();
        set.add(a);
        set.add(b);
        System.out.println(set.size());
    }
}

使用@Data的场景

当使用了@Data这个注解,发现2个相同的对象内容,打印的hashcode竟然一样

是因为底层进行了重写hashcode和equals的方法

那么这时候插入的数据在set里面就会变成1条

我们进入set的添加源码,可以看到,set的底层是map

在hashmap的源码中,会重新计算hash值

如果hash值一样,并且key一样,就是2个相同的对象内容组成了一个key

在这里直接更新value,.并没有插入数据,所以 最终插入的是只有1条数据,这就是@Data的坑

@Data注释掉场景

 第一个对象计算的hash值

第二个对象计算的hash值

对象自带的hashcode 不一样,计算的hash值也不一样,比较的是地址值,

所以在不使用@Data注解的时候,即使对象的内容一样,也会在set插入2条数据

因为hashcode不一样

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
@ApiImplicitParam注解在设置name属性值为参数名称时,会让Swagger在请求时再次封装被描述的参数到请求body中,导致参数值有两个,因此无法正确转换为Long类型。为了解决这个问题,可以使用@ApiParam注解代替@ApiImplicitParam注解,并将它与@PathVariable一起使用,如:@PathVariable @ApiParam(name = "id", value = "用户ID", required = true) Long id。这样既能添加参数说明又不改变参数的请求类型。 [2] 同时使用@ApiParam和@ApiImplicitParam注解时,如果name值一致,那么@ApiImplicitParam注解将会生效,而@ApiParam注解则无效。如果value值不同,那么以value值相同的注解为准。123 #### 引用[.reference_title] - *1* *3* [关于swagger注解@ApiParam 和 @ApiImplicitParam 的问题](https://blog.csdn.net/yeshenyuexieriji/article/details/121399711)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] - *2* [使用Swagger2的@ApiImplicitParam注解遇到,导致MethodArgumentTypeMismatchException](https://blog.csdn.net/Monarchess_1234/article/details/128327635)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值