File tree Expand file tree Collapse file tree 1 file changed +1
-1
lines changed
Expand file tree Collapse file tree 1 file changed +1
-1
lines changed Original file line number Diff line number Diff line change @@ -2756,7 +2756,7 @@ false
27562756*/
27572757```
27582758
2759- ** Holder ** 有一个接受 ** T ** 类型对象的 `set()` 方法,一个返回 T 对象的 `get()` 方法和一个接受 Object 对象的 `equals()` 方法。正如你所见,如果创建了一个 `Holder<Apple > `,就不能将其向上转型为 `Holder<Fruit > `,但是可以向上转型为 `Holder<? extends Fruit > `。如果调用 `get()`,只能返回一个 ** Fruit ** ——这就是在给定“任何;额扩展自 ** Fruit ** 的对象”这一边界后,它所能知道的一切了。如果你知道更多的信息,就可以将其转型到某种具体的 ** Fruit ** 而不会导致任何警告,但是存在得到 ** ClassCastException ** 的风险。`set()` 方法不能工作在 ** Apple ** 和 ** Fruit ** 上,因为 `set()` 的参数也是" **? extends Fruit**" ,意味着它可以是任何事物,编译器无法验证“任何事物”的类型安全性。
2759+ ** Holder ** 有一个接受 ** T ** 类型对象的 `set()` 方法,一个返回 T 对象的 `get()` 方法和一个接受 Object 对象的 `equals()` 方法。正如你所见,如果创建了一个 `Holder<Apple > `,就不能将其向上转型为 `Holder<Fruit > `,但是可以向上转型为 `Holder<? extends Fruit > `。如果调用 `get()`,只能返回一个 ** Fruit ** ——这就是在给定“任何扩展自 ** Fruit ** 的对象”这一边界后,它所能知道的一切了。如果你知道更多的信息,就可以将其转型到某种具体的 ** Fruit ** 而不会导致任何警告,但是存在得到 ** ClassCastException ** 的风险。`set()` 方法不能工作在 ** Apple ** 和 ** Fruit ** 上,因为 `set()` 的参数也是" **? extends Fruit**" ,意味着它可以是任何事物,编译器无法验证“任何事物”的类型安全性。
27602760
27612761但是,`equals()` 方法可以正常工作,因为它接受的参数是 ** Object ** 而不是 ** T ** 类型。因此,编译器只关注传递进来和要返回的对象类型。它不会分析代码,以查看是否执行了任何实际的写入和读取操作。
27622762
You can’t perform that action at this time.
0 commit comments