Java 泛型匿名内部类实例化

Java 泛型匿名内部类实例化,java,generics,Java,Generics,我正在读Java EE,我是通过这个 public class EchoEndpoint extends Endpoint { @Override public void onOpen(final Session session, EndpointConfig config) { session.addMessageHandler(new MessageHandler.Whole<String>() { @Override

我正在读Java EE,我是通过这个

public class EchoEndpoint extends Endpoint {
   @Override
   public void onOpen(final Session session, EndpointConfig config) {
      session.addMessageHandler(new MessageHandler.Whole<String>() {
         @Override
         public void onMessage(String msg) {
            try {
               session.getBasicRemote().sendText(msg);
            } catch (IOException e) { ... }
         }
      });
   }
}
公共类回声端点扩展端点{
@凌驾
public void onOpen(最终会话,EndpointConfig){
session.addMessageHandler(newMessageHandler.Whole(){
@凌驾
公共消息无效(字符串消息){
试一试{
session.getBasicRemote().sendText(msg);
}捕获(IOE){…}
}
});
}
}
这部分,

new MessageHandler.Whole<String>() {....
newmessagehandler.Whole(){。。。。
other
是一个通用的内部类吗?既然我们将字符串指定为一个类型参数,
onMessage
接受字符串?这在我看来真的很奇怪,我们可以将
other
子类化,重写
onMessage
,这将是一个不同的类。然后我们可以将它与类型参数一起传递给
addMessageHandler
对吗?但在这里,我们只是覆盖它,同时在这里指定类型参数,对吗

编辑

所以我了解到MessageHandler是一个包含两个嵌套接口的接口

MessageHandler.Whole
MessageHandler.Partial

现在我们将类型为
MessageHandler
的对象传递到方法
addMessageHandler
,它怎么知道这个对象实现了
onMessage
方法。它不应该知道,因为这个方法位于嵌套接口
all

整是一个泛型的内部类吗

不是。它是一个泛型嵌套类(确切地说是接口),如图所示。术语“内部”是指非静态嵌套类,它隐式地引用其所属类的实例。请参阅

由于我们将字符串指定为类型参数,onMessage是否接受字符串

正确,如图所示

我们可以将整个子类化,重写onMessage,这将是一个不同的类

这正是这段代码所做的。它创建并实例化了一个匿名子类os-Whole

现在我们将MessageHandler类型的对象传递到addMessageHandler方法中,它怎么知道这个对象实现了onMessage方法。它不应该知道,因为这个方法在嵌套接口中

作为示例,接口
Whole
扩展接口
MessageHandler
。这就是为什么您可以将一个整体传递给需要MessageHandler的方法(就像您可以将香蕉传递给需要水果的方法一样,因为香蕉是水果)