2024年5月25日
倒腾了很长时间 突然发现的问题 ide提示改为toList() 我顺便就改过去了 但是实际业务中redis序列化会产生无法反序列化的问题 造成缓存挂壁 业务直接G
collect(Collectors.toList())不能缩写为.toList() 序列化会炸
问题解析:
这个问题其实跟代码本身没有直接关系,而是与序列化器的实现方式有关。在 Java 中,使用 Lambda 表达式时,由于 Lambda 表达式没有具体的类型信息,Java 编译器会根据上下文推断 Lambda 表达式的类型。在这种情况下,你使用了 Collectors.toList()
方法,它返回的是一个 List
接口的实现类,但具体的实现类类型由编译器根据上下文推断。
如果你的序列化器依赖于具体的类型信息来序列化对象,而你使用了 Lambda 表达式,并简写为 toList()
,那么可能会导致序列化器无法正确地获取到类型信息,从而导致序列化失效。
解决这个问题的方法之一是明确指定 Lambda 表达式的类型。例如,你可以将 toList()
换成 Collectors.toList()
,这样就会明确指定 Lambda 表达式的类型为 Collectors.toList()
返回的类型,从而保留了类型信息,使得序列化器能够正确地序列化对象。