java 中各种转型导致的 raw use unchecked警告

February 23, 2023 作者: yijianhao 分类: java 浏览: 179 评论: 0

1. 使用反射获取类上的注解

Class cls = Example.class;

// Error: Type mismatch, cannot convert from Annotation to Resource
Resource anno = cls.getAnnotation(Resource.class); // WARN

Class<?> cls2 = Example.class;
Resource anno = cls2.getAnnotation(Resource.class); // OK

Class<Example> cls3 = Example.class;
Resource anno = cls3.getAnnotation(Resource.class); // OK

链接:https://stackoverflow.com/questions/9432891/why-is-class-getannotation-requiring-me-to-do-a-cast

2. 获取保存在Session中的可迭代对象(比如List)

List<Excemple> attribute = (List<Excemple>) request.getSession().getAttribute(...); 
// 会出现raw use警告
// 可以写成 =>
Object object = request.getSession().getAttribute(....);
if (object instanceof List) {
    List<Excemple> collect = ((List<?>) object).stream()
       .map(i -> (Excemple) i)   // 利用stream将List中的每个对象进行类型转换
	   .collect(Collectors.toList());   
       // todo: 
}

// .map(i -> (Excemple) i) 可以改成 .map(String.class::cast)

3. Gson将json转为Map

LinkedTreeMap map = gson.fromJson(content, LinkedTreeMap.class);
// LinkedTreeMap没有使用<String, Object>进行匹配, 出现警告
// => 改写为:
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;

Type stringObjMap = new TypeToken<Map<String, Object>>() {
}.getType();
LinkedTreeMap<String, Object> map = gson.fromJson(content, stringObjMap);

评论