【发布时间】:2013-12-07 17:06:47
【问题描述】:
所以我在这里尝试了这个关于编写可扩展枚举的“Effective Java 2nd edition”练习。
不过,我遇到了一个非常奇怪的问题——我让每个枚举实例都实现了接口方法,并且在 Eclipse 中看起来都很好。但是当我尝试通过 maven 编译它时,它失败了,尽管 eclipse 之前根本没有抛出任何编译错误(我的 eclipse 和 maven 都使用相同的 JDK:1.6.0_33-b05)。事实证明,我也必须在枚举内部(在所有枚举实例之外)覆盖接口方法 [我从现在开始将其称为 method X] 来解决这个问题!
这里有一个示例说明:
界面:
public interface IDay
{
public boolean isHoliday();
}
枚举:
public enum Day implements IDay
{
SATURDAY
{
@Override
public boolean isHoliday()
{
return true;
}
},
SUNDAY
{
@Override
public boolean isHoliday()
{
return true;
}
},
MONDAY
{
@Override
public boolean isHoliday()
{
return false;
}
};
// Method X: the project won't compile for me without this method!
public boolean isHoliday()
{
return false;
}
}
调用:
public class DayTester
{
public static void main(final String[] args)
{
// line Y: this line won't maven compile if I got rid of the method X
System.out.println("Sunday: " + Day.SUNDAY.isHoliday());
}
}
很奇怪,没有 'X' 方法,eclipse 完全没问题,但是 maven 编译会在 Y 行失败
[ERROR] 未能执行目标 org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile 项目 X 上的(默认编译):编译失败 [错误] DayTester.java:[7,46] 找不到符号 [错误] 符号: 方法 isHoliday() [ERROR] 位置:类 Day
如果我有方法 X,我的 Eclipse 保存操作会自动插入 @Override。删除方法 X 会在我的 Eclipse 中对我之前拥有的那些 Override 注释抛出编译错误。
这是我的问题: 1.为什么在这种情况下maven eclipse 编译不出来? 2. 这里的 Override 注解错误是什么意思? 3. 方法 X 是否可以通过某种方式访问?我想了解什么?
【问题讨论】:
-
你使用的是什么JDK版本?
-
jdk 版本:1.6.0_33-b05。现在也在 OP 上更新了它。
-
我认为 maven 使用的 Java 语言
source版本与 Eclipse 不同。javacparamsource表示“提供与指定版本的源代码兼容性” -
可能是奇怪的编码问题,eclipse 和 javac 看到不同的字符。
-
我怀疑是不是这样。具有相似类结构的完全不同的代码在多台 PC 上表现出相同的行为。