为何ImmutableList.of触发FindBugs空指针警告而Arrays.asList不触发?
为什么FindBugs对ImmutableList.of和Arrays.asList的空指针警告不一致?
核心原因在于FindBugs对两个方法的null安全要求认知不同,具体拆解:
com.google.common.collect.ImmutableList.of(T...):Guava的这个方法设计上明确拒绝null元素,内部会主动检查传入的每个参数是否为null,一旦发现null就直接抛出NullPointerException。FindBugs收录了这个方法的null安全元数据,知道它要求参数必须非null。示例代码中object.getName()可能返回null(因为SomeClass的构造函数允许传入null赋值给name),所以FindBugs会触发NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE警告,提示你这里存在潜在的空指针风险。java.util.Arrays.asList(T...):JDK的这个方法只是把传入的元素包装成一个固定大小的列表,内部不会主动检查元素是否为null,也不会因为传入null就抛出异常。FindBugs的规则里没有标记这个方法要求参数非null,所以即使传入可能为null的object.getName(),也不会触发空指针警告。
简单说就是:FindBugs知道ImmutableList.of不能接受null,而Arrays.asList可以接受null,所以才会出现两种不同的警告结果。
内容的提问来源于stack exchange,提问作者rentedrainbow
相关产品推荐
相关产品推荐

