implementar tengo tres tipos Java como se define a continuación:javac se queja: no puede encontrar símbolo en la interfaz de enumeració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. Artículo 30) El código anterior se compila y ejecuta muy bien en eclipse, pero con Sun javac me sale 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 de la línea 12 de Main.java de return func.call(values);
a return ((Operation)func).call(values)
que compila bien. Además, si pongo los tres tipos (Operation, Main y OperationDefinitions) juntos como tres subclases de una única clase principal, compila también bien.
Así que tengo soluciones para mi problema, pero me pregunto, ¿por qué javac requiere un molde aquí, pero eclipse no? ¿Es esto un error en javac o en eclipse?
He intentado tanto Sun javac 1.5.0_19 y 1.6.0_16
Parece que este es, de hecho, error 6724345. ¡Gracias! – amarillion