Ho tre tipi Java come definito di seguito:javac si lamenta: non riesce a trovare il simbolo sul enum attuazione interfaccia
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();
}
},
;
}
(Questo è quasi esattamente l'esempio fornito in Efficace Java 2nd ed. Articolo 30) Il codice sopra compila e funziona bene in Eclipse, ma con Sun javac ottengo il seguente errore:
Main.java:12: cannot find symbol
symbol : method call(java.util.List<java.lang.Object>)
location: class OperationDefinitions
return func.call (values);
^
1 error
Se cambio linea 12 di Main.java da return func.call(values);
a return ((Operation)func).call(values)
si compila bene. Inoltre, se metto insieme i tre tipi (Operation, Main e OperationDefinitions) come tre sottoclassi di una singola classe principale, compila bene.
Quindi ho soluzioni alternative per il mio problema, ma mi chiedo, perché javac richiede un cast qui, ma eclipse no? Si tratta di un bug in javac o in eclissi?
Ho provato sia Sun javac 1.5.0_19 e 1.6.0_16
Sembra che questo sia davvero un bug 6724345. Grazie! – amarillion