匿名 class 实现接口

Anonymous class implementing an interface

我有以下界面:

public interface MessageFactory<T extends Message> {

    public T create(Session session);
}

当我这样定义 class 时,Eclipse 在该行下面的注释中给出了错误:

public abstract class MessageType<T extends Message> implements MessageFactory<T>{

    public static final MessageType<ObjectMessage> PLAYER_REGISTER = new MessageType<ObjectMessage>() {

        @Override
        public ObjectMessage create(Session session) { //Error, remove @Override annotation
            //impl
        }
    };

    private MessageType(){ }
}

但是如果我将接口中的 create 方法作为抽象方法复制并粘贴到 class 中,错误就会消失:

public abstract class MessageType<T extends Message> implements MessageFactory<T>{

    public static final MessageType<ObjectMessage> PLAYER_REGISTER = new MessageType<ObjectMessage>() {

        @Override
        public ObjectMessage create(Session session) {  //Fine
            //impl
        }
    };

    public abstract T create(Session session);

    private MessageType(){ }
}

匿名 classes 实现接口有什么问题?

看起来像 IDE 某种错误; Java 的编译器对此非常满意。如果我设置那种情况并使用 Oracle 的 Java8 javac,它编译得很好。

没关系here on IDEOne 使用非public 类,或者如果我创建这些文件并编译它们:

Message.java:

public class Message { }

ObjectMessage.java:

public class ObjectMessage extends Message { }

Session.java:

public class Session { }

MessageFactory.java:

public interface MessageFactory<T extends Message> {

    public T create(Session session);
}

MessageType.java:

public abstract class MessageType<T extends Message> implements MessageFactory<T>{

    public static final MessageType<ObjectMessage> PLAYER_REGISTER = new MessageType<ObjectMessage>() {

        @Override
        public ObjectMessage create(Session session) { //Error, remove @Override annotation
            return null;
        }
    };

    private MessageType(){ }
}