我的后续onMessage方法获得了Cannot refer to a non-final variable message inside an inner class defined in a different method
。
@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方法,但是要求字符串不是数组。我想我在这里遗漏了一些东西,这会阻止我理解这一点。
答案 0 :(得分:3)
不,你没有错过任何东西。只有message
必须是final
; message[0]
不会也不会。
答案 1 :(得分:0)
对内部类中非final
事物的访问限制仅适用于局部变量。
在您有权访问的实例上访问非final
字段或数组元素没有任何问题。