将类型“放置”在类中是什么意思?

Mat*_* S. 3 java generics

我正在阅读有关通用类型的oracles教程,第一段真的让我很头疼。该页面位于https://docs.oracle.com/javase/tutorial/java/generics/types.html。该教程以名为“ Box”的类开始:

public class Box {
private Object object;

public void set(Object object) { this.object = object; }
public Object get() { return object; }
}
Run Code Online (Sandbox Code Playgroud)

其后的一段也是我一生都无法理解的一段:

由于它的方法接受或返回一个Object,因此只要它不是原始类型之一,您就可以随意传递所需的任何内容。在编译时无法验证类的使用方式。代码的一部分可能会将Integer放在框中,并期望从中取出Integer,而代码的另一部分可能会错误地传入String,从而导致运行时错误。

最后一句话对我来说绝对没有意义,而且我已经阅读了该特定页面的其余部分,但仍然无法确切知道他们要说的是什么,感觉就像我错过了课程的很大一部分。将某些东西“放置”在盒子里是什么意思?

我已经尝试了一切,我尝试以一千种不同的方式实例化Box类以使其有意义,它们都导致编译时错误而不是运行时错误。无论我从哪个角度看,我都无法理解这一点,难以理解这意味着什么

Swe*_*per 5

由于我们处于Box类的上下文中-一个类是物理盒子的抽象-将整数“放入”盒子只是说“将object字段设置为”的一种抽象方式Integer

至于你的评论:

似乎首先他们在说我可以通过任何事情,然后他们在说我不能通过

这就是最后一句话的意思:您可能具有以下代码:

Box b = new Box();
b.set(1); // I've put an integer into the box, I should be able to get integers out of it later on

...

Integer i = (Integer)b.get();
Run Code Online (Sandbox Code Playgroud)

本教程所指的“代码的另一部分”是“ ...”部分。如果“ ...”实际上有这样的一行:

b.set("String"); // I forgot that I'm supposed to only put Integers in the box
Run Code Online (Sandbox Code Playgroud)

然后,最后一行将引发异常。

泛型通过使b.setObject("String");问题类似编译器错误来解决此问题。