为什么这个代码段没有给出Java教程文档中所述的运行时错误?
参考官方Java教程文档中的本文和上面的代码片段,我试图重现运行时错误。我的代码没有产生任何运行时错误,有什么问题 因为它的方法接受或返回一个对象,所以只要它不是基本类型之一,您就可以自由地传入任何您想要的内容。在编译时无法验证类的使用方式。代码的一部分可能会将整数放入框中并期望从中获取整数,而代码的另一部分可能会错误地传入字符串,从而导致运行时错误 我写的代码为什么这个代码段没有给出Java教程文档中所述的运行时错误?,java,Java,参考官方Java教程文档中的本文和上面的代码片段,我试图重现运行时错误。我的代码没有产生任何运行时错误,有什么问题 因为它的方法接受或返回一个对象,所以只要它不是基本类型之一,您就可以自由地传入任何您想要的内容。在编译时无法验证类的使用方式。代码的一部分可能会将整数放入框中并期望从中获取整数,而代码的另一部分可能会错误地传入字符串,从而导致运行时错误 我写的代码 public class Box { private Object object; public void set(
public class Box {
private Object object;
public void set(Object object) { this.object = object; }
public Object get() { return object; }
}
此代码传入一个
字符串
,但尝试检索一个整数
。编译器无法检测到这将失败。在运行时,它抛出一个ClassCastException
它不会产生任何运行时错误,因为每个字符串都是一个对象
当您试图将get检索到的对象分配给其他不同类型的对象时,会出现错误
例如:
public static void main(String[] args) {
Box g = new Box();
g.set("hello again");
Integer i = (Integer) g.get();
System.out.println(i + 1);
}
你误解了这个例子。这并不是说传入
字符串将导致错误。这意味着当程序的另一部分希望得到一个整数时,传入字符串将导致错误
例如:
g.set("hello again");
Integer i = (Integer) g.get(); // getting string and trying to cast it to integer.
将导致错误
g.set("hello again");
Integer i = (Integer) g.get(); // getting string and trying to cast it to integer.
public static void main(String [] args) {
Box g = new Box();
g.set("hello again");
Integer error = (Integer) g.get();
}