Java基础,请问这是为什么

开不了口1990 2015-02-12 04:25:14
前些日子按要求修改实体类的一个字段类型,把Double改成BigDecimal。没想到却出问题了,我把问题简化一下:
public class TestMain {
public static void main(String[] args) {
Test t1 = new Test();
t1.setNum(10d);

new Test2(t1);
}
}

class Test2{
public Test2(Test t1) {
StringBuffer str = new StringBuffer();
str.append("***").append(t1.getNum().doubleValue());
System.out.println(str);
}
}

class Test {
private Double num;

public Double getNum() {
return num;
}

public void setNum(Double num) {
this.num = num;
}
}

将Test类中的Double类型改成BigDecimal类型,TestMain中的设置值也改成new BigDecimal(10d)。
改了之后运行也是没问题的,于是发补丁,由于Test2代码没改过,所以只打包Test.class和TestMain.class。
但是这样运行就出问题了,提示是t1.getNum()不是Double类型什么的,所以我想问为什么这里的类型不能自动判断呢?
...全文
145 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
姜小白- 2015-02-12
  • 打赏
  • 举报
回复
类编译的时候,已依赖支撑类的class文件。 使用BigDecimal 之后,Test2 的类编译的class文件中依赖的Test 类型就为 BigDecimal 了。 而之前的Test2 的类编译的class文件中依赖的Test 类型却还是 Double,找不到Double 类型的 Test 类的 class 文件,就报错了。 因为类之间的依赖关系,决定了java不能很智能的去每次判断所给的对象的类型。

50,504

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧