项目如何在eclipse中编译,但javac会抛出编译器错误?

mav*_*vix 3 java eclipse compiler-errors

在学校的组项目上工作,当我在命令行中运行javac时,以下行会引发错误.

Object result = engine.eval(equation); //evaluate the arithmetic expression
cellValue = (double) result; // <-- This throws a compiler error (obviously)
Run Code Online (Sandbox Code Playgroud)

但出于某种原因,这会在我的小组成员正在使用的eclipse中编译和工作(!).我试着让自己确认,因为我无法相信.

ScriptEngine engine = manager.getEngineByName("JavaScript");
Run Code Online (Sandbox Code Playgroud)

引擎是一个ScriptEngine,如果这是相关的.我不能为我的生活弄清楚eclipse的编译器如何允许编译Object直接转换为a的行double.

Cyr*_* Ka 6

可能你的朋友正在使用另一种版本的Java语言.的演员Objectdouble(基本类型)似乎是合法的在Java 7中,而不是在Java中6,你可以有你的朋友在Eclipse中更改他们的项目设置或更新您的编译器版本7.

请注意,转换ObjectDouble(类)在两个版本中都有效.


mer*_*ike 5

似乎允许的转换已在Java 5和7之间进行了扩展.在Java语言规范中,第3版(适用于Java 5和6):

可以通过拆箱转换(第5.1.8节)将引用类型的值转换为基元类型.

拆箱转换将引用类型的值转换为基本类型的相应值.具体来说,以下8个转换称为拆箱转换:

  • 从类型Boolean到类型boolean
  • 从类型字节到类型字节
  • 从类型字符到类型字符
  • 从短类型到短类型
  • 从类型Integer到类型int
  • 从类型Long到类型long
  • 从类型Float到类型float
  • 从类型Double到类型double

所以在Java 5和6中,强制Object转换double是不合法的.

Java语言规范,Java SE 7中版写道:

下表列举了在某些转换转换中使用的转换.每次转化都用符号表示:

⇓表示缩小参考转换(第5.1.6节)

⊔表示拆箱转换(§5.1.8)

并且下表描述了从Object到double的转换

⇓,⊔

即,从流延Objectdouble是流延到Double随后取消装箱转换到double.

因此,当您编译Java 6时,您的团队成员很可能正在编译Java 7.