gpt4 book ai didi

java - 为什么显示compile_error?

转载 作者:行者123 更新时间:2023-12-01 19:25:49 25 4
gpt4 key购买 nike

代码:(显示编译错误的行是 3 )

Pair<Manager> managerBuddies = new Pair<Manager>(ceo, cfo);
Pair<? extends Employee> wildcardBuddies = managerBuddies; // OK
wildcardBuddies.setFirst(lowlyEmployee); // compile-time error

错误是关于“不可能发生损坏”

通配符Buddies的类型是什么?( Pair<? extends Employee> or Pair<Manager> )

最佳答案

代码导致错误的原因是因为无法知道 Employee wildcardBuddies 的特定子类将接受什么。为什么编译器不确定?为了看到这一点,我们更仔细地查看代码:

Pair<Manager> managerBuddies = new Pair<Manager>(ceo, cfo);

这里我们创建一对 Manager,它是 Employee 的子类。

Pair<? extends Employee> wildcardBuddies = managerBuddies; // OK

在这里,我们将刚刚创建的对分配给一对对象,该对象必须是 Employee 或其子类。请注意,我们在这里并不是创建一个新对象,只是对第一对进行第二次引用。

wildcardBuddies.setFirst(lowlyEmployee); // compile-time error

现在我们尝试做一些不应该被允许的事情,原因很简单,lowlyEmployee不是经理。请记住,虽然 wildcardBuddies 是对一对 Employee 子类型的引用,但它指向的对象非常具体是一对 Manager,并且不允许从父类(super class) (Employee) 到子类 (Manager) 的转换。由于编译器无法检查允许在具有给定参数的实际底层对象上调用 setFirst() 的所有可能情况,因此它有一条规则禁止所有非法行为以及某些合法行为。

希望这有助于更好地解释 PDF 中的答案。如果我有任何错误,请有人纠正我。

关于java - 为什么显示compile_error?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1115172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com