java 将Object转成List

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 将Object转成List相关的知识,希望对你有一定的参考价值。

List<byte[]> taskList = (ArrayList<byte[]>)obj;
出现警告:Type safety: Unchecked cast from Object to ArrayList<byte[]>

请问大侠,如何解决???? 原因又是什么???

通常我们遇到这个问题是出现在Object转化为目标类型时,这个转化并不是安全的。

这个问题普遍认为因为使用了jdk1.5或者1.6的泛型,request.getAttribute("***")得到的是一个默认为Object的类型,当把他们转成List<***>时,编译器认为有可能会出错,所以提示这个类型安全。

以下是大家普遍用的取消警告的方法(不过危险并没有解除):

一、方法上添加@SuppressWarnings("unchecked")

二、Eclipse的Window->Preferences->Java->Compiler->Errors/Warning->Generic types中Unchecked generic type operation设置为Ignore。

三、Eclipse的Window->Preferences->Java->Compiler将Compiler compliance level 设置为小于1.5

扩展资料:

@Override

public List<LocalObtMind> listByProperties(int start, int number) throws Exception

String sql = "select * from (SELECT "

+ "decrypt_des(s.ddatetime, 'szmb#1601') ddatetime,"

+ "decrypt_des(s.obtid, 'szmb#1601') obtid,"

+ "decrypt_des(s.wd2df, 'szmb#1601') wd2df,"

+ "decrypt_des(s.t, 'szmb#1601') t,"

+ "decrypt_des(s.p, 'szmb#1601') p,"

+ "decrypt_des(s.hourr, 'szmb#1601') hourr "

+ "FROM t_LocalObtMind s) order by ddatetime desc ";

Query query = em.createNativeQuery(sql.trim());

query.setFirstResult(start);

query.setMaxResults(number);

List<Object> list = null;

List<LocalObtMind> list2 = new ArrayList<LocalObtMind>(); 

try

list = query.getResultList();

for (int i = 0; i < list.size(); i++)   

LocalObtMind localObtMind = new LocalObtMind();  

Object[] obj = (Object[])list.get(i); 

localObtMind.setDdatetime(obj[0].toString());

localObtMind.setObtid(obj[1].toString());

localObtMind.setWd2df(obj[2].toString());

localObtMind.setT(obj[3].toString());

localObtMind.setP(obj[4].toString());

localObtMind.setHourr(obj[5].toString());

list2.add(localObtMind);  

catch(Exception e)

e.printStackTrace();

return list2;

参考技术A 这是一个类型转换警告,提示未经过检查。但是如果能够确定obj自身的真实类型是ArrayList<byte[]>的话,那么这样的转换是没有问题的,警告可以忽略。 参考技术B 没事,因为向下转型本身就有安全隐患。只要你确定这个obj实际上是List类型就行。不然运行时会报异常。 参考技术C 你写错了,你要先把你要用到的ArrayList new一个出来 然后赋值
类似于这样写:
List list=new ArrayList();
list.add(obj);
类似于这样!
参考技术D 警告可以忽略,但是你要确定obj可以强制转换成 List<byte[]>。否则会报错。

java 各类型转换 convert

1、Object TO List<?>

  java中如果需要将一个object转成list,大部分人会直接使用强制类型转换:(List<String>) obj这样。这样强制转换编译会提示Unchecked cast: \'java.lang.Object\' to \'java.util.List<java.lang.String>\',编译器的意思该强制类型转换并未做类型校验,强制转换并不安全,可能会抛出异常导致程序崩溃。在很多博客中有人会建议用@SuppressWarnings("unchecked")解决编译器警告,这种方法是极为不妥的,因为它只是用来告诉编译器忽略警告,而警告却实实在在的存在。

 这里提供一种公共方法如下:

public static <T> List<T> castList(Object obj, Class<T> clazz) {
    List<T> result = new ArrayList<T>();
    if(obj instanceof List<?>) {
        for (Object o : (List<?>) obj) {
            result.add(clazz.cast(o));
        }
        return result;
    }
    return null;
}

2、Object TO Map

  可以使用 jackson 来进行转换

  首先 pom 中引入对应的包

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.6.3</version>
</dependency>

  直接上测试案例:

import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Arrays;
import java.util.Map;

public class ObjectToMapExample {

    public static void main(String[] args) {

        ObjectMapper oMapper = new ObjectMapper();

        Student obj = new Student();
        obj.setName("mkyong");
        obj.setAge(34);
        obj.setSkills(Arrays.asList("java","node"));

        // object -> Map
        Map<String, Object> map = oMapper.convertValue(obj, Map.class);
        System.out.println(map);
    }
}

 

以上是关于java 将Object转成List的主要内容,如果未能解决你的问题,请参考以下文章

xamarin android如何将Java.Lang.Object类型转成C#类型

java 一个方法返回了一个list,怎么将这个list转成List<List<Object>>

java中如何把hashmap转换成object数组

用熊猫将Excel工作表(Listobject)读入python

如何把map转成json

如何将java中的map转换成jsonobject