2013-11-21 2 views
1
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

음과의 인터페이스를 받아들이는 익명의 내부 클래스를 정의하는 것입니다 익명의 클래스인가요? 큰 빨간 사과처럼 큰 사과입니다. – Ingo

답변

4

하지만 실행은() 스레드에 의해 호출 될 때, createMessage의() 메소드가 를 호출하는 방법에 따라 혼란 스러워요?

jmsTemplate

MessageCreator 인스턴스가 전달 될 것으로 기대 것이다 그것을위한 MessageCreator의 createMessage() 메소드를 호출에 대한 책임 것입니다.

또한 "익명의 클래스"와 같은 것은 없지만 "익명의 내부 클래스"대신 이 있습니다. 왜 그런가요?

예. 익명의 공개 클래스과 같은 것이 없으므로 올바른 정의는 익명의 내부 클래스입니다. 로컬 클래스는 클래스 선언이지만 anonymous classes은 표현식입니다. 즉, 클래스를 다른 표현식에 정의하면 내부가입니다.

상세 정보 : 그 자체로 의미 클래스가 아니기 때문에

2

그것은이 "익명 내부 클래스"입니다, 그것은 당신이했습니다 몇 가지 추상 메소드와 클래스의 다른 클래스에서 선언되었습니다. 방법 자체에 관해서는

, 내가 핸들러가 당신에게 보내 겠지 클래스를 검색하기 전에 (msTemplate)이 단지 방법 createMessage

관련 문제