javac se queja: no se puede encontrar el símbolo en la interfaz de implementación de enumeración

amarillion :

Tengo tres tipos de Java como se define a continuación:

Main.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());
    }
}

Operation.java

import java.util.List;

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

OperationDefinitions.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();
        }
    },
    ;

}

(Este es casi exactamente el ejemplo dado en Effective Java 2nd ed. Item 30) El código anterior se compila y se ejecuta bien en eclipse, pero con Sun javac aparece el siguiente error:

Main.java:12: cannot find symbol
symbol  : method call(java.util.List<java.lang.Object>)
location: class OperationDefinitions
        return func.call (values);
                           ^
1 error

Si cambio la línea 12 de Main.java de return func.call(values);a, return ((Operation)func).call(values)se compila bien. Además, si pongo los tres tipos (Operation, Main y OperationDefinitions) juntos como tres subclases de una sola clase principal, también se compila bien.

Así que tengo soluciones para mi problema, pero me pregunto, ¿por qué javac requiere una conversión aquí, pero eclipse no? ¿Es esto un error en javac o en eclipse?

Probé tanto Sun javac 1.5.0_19 como 1.6.0_16

Stephen Denne:

¿Podría ser este el error 6522780 ?
¿O el error 6330385 ?
O el error 6724345 , corregido en JDK 7, para que pueda probarlo.

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

TOP Lista

CalienteEtiquetas

Archivo