返回信息流java中规定父类可以强制类型转换为子类,这样之后可以通过编译。但是在运行时却又抛出运行时异常,既然都不能运行,又何苦让编译通过呢???在设计编译器的时候直接不编译通过不行吗??为什么要这么设计呢??求指点
这是一条镜像帖。来源:北邮人论坛 / java / #28525同步于 2014/2/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
关于类强制转换的问题
z843259180
2014/2/19镜像同步16 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
编译的时候,是java识别不出来吧,所以只能放到运行的时候,就像4/0这样的~~
【 在 z843259180 的大作中提到: 】
: java中规定父类可以强制类型转换为子类,这样之后可以通过编译。但是在运行时却又抛出运行时异常,既然都不能运行,又何苦让编译通过呢???在设计编译器的时候直接不编译通过不行吗??为什么要这么设计呢??求指点
【 在 Q123 的大作中提到: 】
: 编译的时候,是java识别不出来吧,所以只能放到运行的时候,就像4/0这样的~~
我觉着这种解释不大合理。如果你不加强制类型转换连编译都无法通过,所以编译器肯定能判断出是父类转向子类吧。而加了强制类型转换则能编译通过,之后又无法运行,这是何苦费半天劲要让他编译通过呢??
可以拿个例子上来说么?不转换不能通过编译是不是因为父类没有你要调用的功能才报错。。而转换后就是其他的异常了?
【 在 z843259180 (只和你) 的大作中提到: 】
: 我觉着这种解释不大合理。如果你不加强制类型转换连编译都无法通过,所以编译器肯定能判断出是父类转向子类吧。而加了强制类型转换则能编译通过,之后又无法运行,这是何苦费半天劲要让他编译通过呢??
Object[] genAry = new Object[] { (Object)(new Integer(10)), (Object)("Hello") };
for (Object obj : genAry) {
if (obj instanceof Integer) {
System.out.printf("Integer: %d\n", (Integer)obj);
} else if (obj instanceof String) {
System.out.printf("String: %s\n", (String)obj);
} else {
System.out.printf("I don't know what it is.\n");
}
}
说的是。确实错了。等我改改。。。
【 在 smartjing100 的大作中提到: 】
: @7楼,暖洋洋,你觉得你的第一句对么?这不是严重的错误么?这样子的初始化是错误滴。