Java中Object转换为List类型
前⾔
在很多项⽬编写过程中会使⽤Map<?>类型来进⾏参数的传递。为了能够让更多的类型放⼊value中,实例化的类型往往是Map<String, Object>来存放数据。
解析数据的时候(key)所获取到的类型为Object。此时,需要转换成我们所需要的数据类型进⾏使⽤。
类型转换
在类型转换⼯程中,常见的转换⽅式为强制转换。如(String)(key),((key)等。在是如果接收的类型为List,此时强
转(List<String>) obj则会报出警告。编译会提⽰Unchecked cast: 'java.lang.Object' to 'java.util.List<java.lang.String>'编译器的认为强制类型转换并未做类型校验,强制转换并不安全,可能会抛出异常导致程序崩溃。
治标不治本
很多⼈会使⽤@SuppressWarnings("unchecked")来解决编辑器中的警告,好看是好看了。但是这⽤来告诉编译器忽略警告,⽽警告却实实在在的存在。项⽬的风险还是存在。
转换⽅法
这时候可以⾃⼰写⼀个⼯具类,⽤来对接收到的Object类型进⾏转换。以List<String>类型为例。
public class HAUtils{
public static List<String>objToList(Object obj)throw CoreException{
List<String> result =new ArrayList<String>();
if(obj instanceof ArrayList<?>){
for(Object o :(List<?>) obj){
result.add(String.class.cast(o));
}
}
return result;
}
}
其中: Java中把⼀个<?>称为类型通配符。为了表⽰各种泛型List的⽗类,可以使⽤List<?>,意思是元素类型未知的List,它的元素类型可以匹配任何类型。此时只能够get()不能进⾏add()操作。
当然,也可以根据这种⽅法写⼀个通配类型的转换。
public class HAUtils{
public static<T> List<T>objToList(Object obj, Class<T> cla)throw CoreException{
List<T> list =new ArrayList<T>();
if(obj instanceof ArrayList<?>){
for(Object o :(List<?>) obj){
list.add(cla.cast(o));
}
return list;
}
return null;
}
}object to
要是为list类型就返回实际参数,要是不是就返回空,当然也可以写⾃⼰需要的抛错机制。
使⽤
直接调⽤⽅法即可。
HAUtils ha =new HAUtils();
List<String>= HAUtils.objToList(obj,String.class);
传⼊String.class,或者int.class等
以上。
⼀句话提⽰:int.class = Integer.TYPE !=Integer.class 具体的解释可以⾃⾏百度。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。