当前位置: 首页 > 知识库问答 >
问题:

Java不会为非参数化列表抛出ClassCastException

应志用
2023-03-14

我有一个没有任何参数初始化的列表。我将map 添加到该列表中。

然后,我创建了一个user对象,在编译时将列表类型化为list 之后,我就知道了。

但是我很惊讶,我在运行时也没有得到那些错误。

import java.util.HashMap;
import java.util.List;
import java.util.Map;

class User {
    private String name;
    public String getName(){
        return name;
    }
}

public class Main {
    public static void main(String[] args) {


        Map<String, Object> map1 = new HashMap<>();
        map1.put("name", "Bruce");
        Map<String, Object> map2 = new HashMap<>();
        map2.put("name", "Clark");
        List list = List.of(map1, map2);
        List<User> users = (List<User>) list;
        System.out.println(users.get(0) instanceof Map);

    }
}

产出:

true

我在这里漏掉了什么?

此外,当我尝试访问上述users列表中的对象时,我确实得到了ClassCastException。

java.lang.ClassCastException: class java.util.HashMap cannot be cast to class User

共有1个答案

鱼志学
2023-03-14

使用第一个泛型前用法(list),编译器不再执行类型安全泛型。

    List list = List.of(map1, map2);
    List<User> users = (List<User>) list;
    System.out.println(users.get(0) instanceof Map);

因此,Users只是Object列表

(无论如何,泛型强制转换不是真正的强制转换,更多的是为编译器提供的元数据,而不是承载代码--因为在运行时会删除类型。)

 类似资料:
  • 这是我的代码: 以下是我的任务要求: 一个参数化构造函数,将接收endpoint(作为点)、方向(作为int)和样式(作为字符串)。如果接收到的点或字符串为空,则抛出新的IllegalArgumentException( 我知道我检查样式是虚线、虚线还是双精度的部分出了问题,因为当我把它注释出来时,除了那个部分,所有的东西都工作了。就现在的情况而言,它只是在所有事情上抛出了非法的辩论例外。 我有一

  • 抛出异常的行为是否可能抛出不同的异常? 为了抛出异常,必须(可选地)分配新对象,并调用其构造函数(隐式调用fillinstacktrace)。在某些情况下,听起来像addSupressed也被称为。那么如果没有足够的内存会发生什么呢?JVM是否需要预分配内置异常?例如,(1/0)会抛出OutOfMemoryError而不是ArithmeticException吗? 此外,构造函数是一个方法调用,因

  • 问题内容: 如果没有明确指出它是String [],那么第一次调用someMethod怎么不编译? 使用数组初始化器创建String []数组很好,但是不能使用它传递参数。花括号是否以其他方式用于传递参数,从而使我期望其表现出轨? 编译器错误如下: Moo类型的someMethod(String [])方法不适用于参数(字符串,字符串,字符串) 问题答案: 您只能在声明数组变量或在数组创建表达式(

  • 问题内容: 我有非常简单的代码: 我通过list.add(0,d)得到ConcurrentModificationException异常。所以总的来说,这是因为sublist()造成的。我很困惑,因为在sublist()的情况下,文档中说: 返回列表由该列表支持,因此返回列表中的非结构性更改会反映在此列表中, 反之亦然 。 您能解释一下渔获量在哪里吗? 问题答案: 这是原始列表的简单视图(请参阅此

  • 当尝试使用neo4j-harness测试neo4j服务器时,我在构建嵌入式Neo4j服务器时收到异常 我的pom.xml是这样的:

  • 这个问题以前的标题是“Spring5 Reactive WebClient消费HAL+JSON HATEOAS PagedResources”,但新的标题更合适。 下面的代码与RestTemplate完全兼容(参数化类型是从Spring DataREST提供的HateoAs/Hal PagedResource返回的): 上面调用服务方法的控制器代码是: 使用curl的结果是: 经过大量研究后,上面