を実装する列挙型のシンボルを見つけることができないの下に定義されている:javacは文句を言う:私は3つのJavaの型を持っているインタフェース
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();
}
},
;
}
(これは、ほぼ正確にEffective Java 2nd edで与えられた例です。項目30) コンパイル上記のコードと日食でうまく動作しますが、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
私はreturn func.call(values);
からreturn ((Operation)func).call(values)
にMain.javaの行12を変更した場合、それは罰金コンパイルします。さらに、3つのタイプ(Operation、Main、OperationDefinitions)を1つのメインクラスの3つのサブクラスとしてまとめれば、それもうまくコンパイルされます。
問題の回避策がありますが、なぜjavacがここでキャストする必要がありますか?これはjavacまたはeclipseのバグですか?
私はそれは、Sunのjavacのバグかもしれない日のjavacの1.5.0_19および1.6.0_16
これは本当にバグ6724345のようです。ありがとう! – amarillion