繁体   English   中英

消息[0]是消息数组中的最终消息

[英]is message[0] is final in message array

我得到的Cannot refer to a non-final variable message inside an inner class defined in a different method我的后续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并改变了我的代码,如bellow。

.
.
.
                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方法,但是要求字符串不是数组。 我想我在这里错过了什么,这会阻止我理解这一点。

不,你没有错过任何东西。 只有message必须是final ; message[0]不是也不是。

访问内部类中非final事物的限制仅适用于局部变量

在您有权访问的实例上访问非final字段或数组元素没有任何问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM