Cannot refer to a non-final variable message inside an inner class defined in a different method
私は次の onMessage メソッドを取得していました。
@Override
public void onMessage(Message msg) {
if (msg instanceof ActiveMQMessage){
try {
ActiveMQMessage aMsg = (ActiveMQMessage)msg;
String message = ""; // I cant use final here because my if else message assingment
int consumerCount =(Integer) aMsg.getProperty("consumerCount");
if(consumerCount == 0 ){
message = "No cousumers for queue bank.7083 (HNB Bank)";
}else{
message = "Added new consumer to bank.7083 (HNB Bank) total counsumers : "+consumerCount;
}
final MessageCreator request = new MessageCreator() {
public Message createMessage(final Session session) throws JMSException {
TextMessage textMessage = session.createTextMessage();
textMessage.setText(message); // I’m getting compilation issue here
return textMessage;
}
};
amqTemplate.send("HUTCH", request);
} catch (IOException e) {
e.printStackTrace();
}
}
次にString [] messages = new String[1]
、代わりに配列を使用String message
し、コードを次のように変更しました。
.
.
.
final String[] message = new String[1];
if(consumerCount == 0 ){
message[0] = "No cousumers for queue bank.7083 (HNB Bank)";
}else{
message[0] = "Added new consumer to bank.7083 (HNB Bank) total counsumers : "+consumerCount;
}
.
.
.
textMessage.setText(message[0]);
そして、問題なくコンパイルされました。私の理解では、メッセージ [0] は最終的なものではありません。そのため、メッセージ [0] に異なるメッセージを割り当てることができました。また、メッセージ配列は最終的な setText メソッドですが、配列ではなく文字列を要求しています。ここで何かを見逃したので、これを理解するのを妨げていると思います。