判断java枚举是否实现接口_javac抱怨:在枚举实现接口上找不到符号

我有三个Java类型,如下所定义:

Main.java:

import java.util.Arrays;

import java.util.List;

public class Main

{

private Object callFunction()

{

OperationDefinitions func = OperationDefinitions.CONCATENATE;

List values = Arrays.asList(new Object[] {"ABC", "-", "DEF"});

return func.call (values);

}

public static void main (String[] args)

{

Main main = new Main();

System.out.println (main.callFunction());

}

}

操作程序

import java.util.List;

public interface Operation

{

abstract Object call(List params);

}

操作定义.java

import java.util.List;

enum OperationDefinitions implements Operation

{

CONCATENATE() {

public Object call(List params)

{

StringBuilder builder = new StringBuilder();

for (Object param : params) builder.append((String)param);

return builder.toString();

}

},

;

}

(这几乎就是有效Java第二ED项目30中给出的例子)

上面的代码在Eclipse中编译并运行得很好,但是使用Sun Javac,我会得到以下错误:

Main.java:12: cannot find symbol

symbol : method call(java.util.List)

location: class OperationDefinitions

return func.call (values);

^

1 error

如果我将main.java的第12行从

return func.call(values);

return ((Operation)func).call(values)

它编译得很好。此外,如果我将三种类型(operation、main和operationdefinitions)放在一起作为一个主类的三个子类,那么它也可以编译。

所以我确实有解决问题的方法,但我想知道,为什么javac需要在这里进行强制转换,而eclipse不需要?这是javac中的bug还是eclipse中的bug?

我试过Sun Javac 1.5.0_19和1.6.0_16

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值