Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从对象到阵列列表的强制转换_Java_Jsp - Fatal编程技术网

Java 从对象到阵列列表的强制转换

Java 从对象到阵列列表的强制转换,java,jsp,Java,Jsp,错误消息: 类型安全:未选中从对象到ArrayList的强制转换 属性消息是从另一个jsp页面在ArrayList中发送的。如果有问题,只需添加注释即可 A a = new A(); ArrayList<A> myA = (ArrayList<A>)request.getAttribute("message"); 将对象强制转换为某种泛型类型是不安全的,它可能会导致ClassCastException。如果输入无效,您可以将其放入try并处理您的响应 无法确定列表是否

错误消息:

类型安全:未选中从对象到ArrayList的强制转换


属性消息是从另一个jsp页面在ArrayList中发送的。

如果有问题,只需添加注释即可

A a = new A();

ArrayList<A> myA = (ArrayList<A>)request.getAttribute("message");
将对象强制转换为某种泛型类型是不安全的,它可能会导致ClassCastException。如果输入无效,您可以将其放入try并处理您的响应


无法确定列表是否真的应该具有泛型参数。您必须事先知道参数应该是什么,否则在得到ClassCastException时就会发现。这就是代码生成警告的原因,因为编译器不可能知道是否安全。

如果您想消除该警告,我将执行以下操作:

@SuppressWarning ("unchecked")
List<A> myA = (ArrayList< A >)request.getAttribute("message");

这不是错误,这是警告。如果你确定它是正确的,你可以。您也可以先使用instanceof检查对象的类型。@1blustone:不是泛型-您可以检查它是否是ArrayList,但不能使用instanceof检查它是否是ArrayList,因为在执行时没有这样的东西。@JonSkeet true,由于最初的帖子,不知道它是泛型列表。没有意识到对原始列表进行强制转换不会导致此警告。我想如果预期的返回类型已知,您可以转换为ArrayList或简单的原始类型。我不明白这个问题。你能解释一下你在这里的期望吗?这只是一个警告,所以您仍然可以继续。运行此命令时是否遇到java.lang.ClassCastException?@1Blastone:如果没有泛型特性,警告就不会出现。您误解了警告的意义。这不是将一个对象强制转换为某种类型的问题——它本身不会产生警告:objectx=foo;字符串y=字符串x;。关键是,将源代码中创建的东西作为ArrayList强制转换为ArrayList不会导致异常-转换将成功,因为类型信息在执行时不存在。访问元素时的隐式强制转换将导致异常。@JonSkeet无法确定列表是否真的应该具有泛型参数。您必须事先知道参数应该是什么,否则在得到ClassCastException时就会发现。这就是代码生成警告的原因,因为编译器不可能知道它是否安全。是的,但这并不是编译器知道它是否安全的问题。。。编译器几乎从不知道强制转换是安全的。如果类型参数错误,那么这行代码不会引发异常。我仍然认为这个答案是误导性的——它将常规的铸造方面与泛型特有的方面混为一谈。
   List<A> castToArrayList() {

        Object obj = request.getAttribute("message");

        return ((List<?>) obj).stream().map(el -> (A) el).collect(Collectors.toList());
    
or  

    return ((List<?>)obj)
                     .stream()
                     .filter(A.class::isInstance)
                     .map(A.class::cast)
                     .collect(Collectors.toList());

}