public void run() {
jmsTemplate.send(new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
byte[] buf = createBytesMessage(5120);
BytesMessage message = session.createBytesMessage();
message.writeBytes(buf);
message.setLongProperty("_publish_time", System.currentTimeMillis());
return message;
}
});
}
我有这段代码片段,我能说的是它使用的是匿名类。 但我对如何在线程调用run()时调用createMessage()方法感到困惑?
我读到的某个地方也没有“匿名课”,而是“匿名内部课”。为什么会那样?
答案 0 :(得分:4)
但我对如何调用createMessage()方法感到困惑 什么时候线程调用run()?
jmsTemplate
期望传递MessageCreator
个实例,它将负责调用MessageCreator的createMessage()
方法。
我读到的某个地方也没有像“匿名课”那样的东西 而是它的“匿名内部阶级”。为什么会那样?
是。正确的定义是匿名内部类,因为没有匿名公共类这样的东西。虽然本地类是类声明,但anonymous classes是表达式,这意味着您在另一个表达式中定义该类,因此它们被称为 inner 。
更多信息:
答案 1 :(得分:2)
它是一个“匿名内部类”,因为它不是一个独立的类,它是一个带有一些抽象方法的类,你已经在另一个类中声明了。
至于方法本身,在我查找类之前,我假设你发送给它的处理程序(msTemplate
)只接受一个方法createMessage
的接口