为什么这段Java代码在一个Eclipse项目中生成错误,而在另一个项目中却不生成错误?

为什么这段Java代码在一个Eclipse项目中生成错误,而在另一个项目中却不生成错误?,java,eclipse,autoboxing,type-mismatch,Java,Eclipse,Autoboxing,Type Mismatch,我在名为Sandbox.java的文件中有以下测试类: package cas; public final class Sandbox { public static void main(String[] args) { int primitive = 42; Integer boxed = primitive; } } 这是我期待的工作,因为自动装箱。但是,它无法编译,错误为:“类型不匹配:无法从int转换为整数”。为了隔离测试用例,我将

我在名为
Sandbox.java
的文件中有以下测试类:

package cas;

public final class Sandbox {

    public static void main(String[] args) {
        int primitive = 42;
        Integer boxed = primitive;
    }

}
这是我期待的工作,因为自动装箱。但是,它无法编译,错误为:“类型不匹配:无法从int转换为整数”。为了隔离测试用例,我将该文件放在不同的Eclipse项目中,其中代码完全相同,除了
包cas被替换为
包沙盒
。在这个项目中,它编译正常

我使用的是编译器遵从性级别1.8,我相信这是最新的JDK。如果我没记错的话,因为自动装箱是在1.5中引入的,所以int–>整数转换应该不会有任何问题,或者我是这么认为的

我检查了这两个项目的属性,每个带有“启用项目特定设置”复选框的页面都将其禁用。所以这两个项目的汇编应该没有区别,不是吗


我不明白为什么这段代码会在Java 1.8环境中出现错误。

结果是
包cas
声明了一个类型
cas.Integer
。由于本地包卷影中声明的名称隐式导入了系统类型,因此声明中隐式使用了
cas.Integer
,而不是
java.lang.Integer
,并且错误消息没有给出完全限定的类型名称

这个问题可以通过声明变量
java.lang.Integer boxed=primitive
或(我个人的最爱)添加
import java.lang.Integer
来解决,因为专门导入的类型会隐式地隐藏导入的包类型(它们分别隐藏隐式导入的系统类型)。或者不声明名为
Integer
的类。(尽管在这种情况下有很好的理由。)


当然,这是一个愚蠢的错误,但可能会对某些人有所启发(因为错误信息似乎不可能出现)。

就个人而言,我认为这个问题不会很有帮助,部分原因是,那些遇到这种错误的人90%的时间都不会去做另一个项目。如果使用
java.lang.Integer
@jeroenvanevel,你可能已经找到了答案。好吧,如果大家一致认为这个问题不会有多大帮助,那么它肯定可以被删除。一、 首先,我已经编程多年了,我发现隐式导入的跟踪序列非常有趣。但很明显,我不能代表其他人说话。