javac 提示 : cannot find symbol on enum implementing interface

标签 java interface casting enums javac

我有如下定义的三种 java 类型:

主要.java:

import java.util.Arrays;
import java.util.List;

public class Main 
{
    private Object callFunction() 
    {
        OperationDefinitions func = OperationDefinitions.CONCATENATE;
        List<Object> 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());
    }
}

操作.java

import java.util.List;

public interface Operation
{
    abstract Object call(List<Object> params);
}

操作定义.java

import java.util.List;

enum OperationDefinitions implements Operation
{
    CONCATENATE() {
        public Object call(List<Object> params) 
        {
            StringBuilder builder = new StringBuilder();
            for (Object param : params) builder.append((String)param);
            return builder.toString();
        }
    },
    ;

}

(这几乎就是 Effective Java 2nd ed. Item 30 中给出的示例) 上面的代码在 eclipse 中编译和运行得很好,但是在 Sun javac 中我得到以下错误:

Main.java:12: cannot find symbol
symbol  : method call(java.util.List<java.lang.Object>)
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 还是 eclipse 中的错误?

我已经尝试过 Sun javac 1.5.0_19 和 1.6.0_16

最佳答案

这会不会是 Bug 6522780 ?
或者 Bug 6330385 ?
或者 Bug 6724345 - 已在 JDK 7 中修复 - 因此您可以对其进行测试。

关于javac 提示 : cannot find symbol on enum implementing interface,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1508632/

相关文章:

java - 使用接口(interface)的默认方法实现方法 - 矛盾吗?

java - Android Activity 和 Java 类之间的通信

c# - LINQ to Entities 无法识别方法 'Int32 ToInt32(System.Object)' 方法,并且无法将此方法翻译成存储表达式

c - 为什么 Kernighan 和 Ritchie 包含看似不必要的类型转换?

java - 如何创建自增主键?

java - Singleton类和 volatile 变量的组合

php - 使用带有常量的接口(interface)作为类的多态行为的开始是好的做法吗?

java - Kotlin 访问修饰符

java - 通过比较 ZonedDateTime 类型的内部字段,使用 lambda 对 beans 进行排序

javascript - EventTarget 类型上不存在属性 innerWidth