Java 泛型匿名内部类实例化
我正在读Java EE,我是通过这个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
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的方法(就像您可以将香蕉传递给需要水果的方法一样,因为香蕉是水果)