- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
代码:(显示编译错误的行是 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/
我有一个名为 foo 的函数。 fn foo(val: bool) { if val { panic!("This should not ever happened"); }
我是一名优秀的程序员,十分优秀!