匿名內部類訪問外部局部變量必須是final修飾的,Java 1.8 會默認為其加上final
例子如下:
public void send(String topicName, T obj) { String jsonObj; if (obj instanceof String) { jsonObj = String.valueOf(obj); } else { jsonObj = JSON.toJSONString(obj); } LOGGER.info("send message = {}", jsonObj); // 發送消息 ListenableFuture<SendResult<String, Object>> future = kafkaTemplate.send(topicName, jsonObj); future.addCallback(new ListenableFutureCallback<SendResult<String, Object>>() { @Override public void onFailure(Throwable throwable) { OrderBaseInfo baseInfo = JSONObject.parseObject(jsonObj, OrderBaseInfo.class); LOGGER.info("Producer: send fail: {}", throwable.getMessage()); } @Override public void onSuccess(SendResult<String, Object> stringObjectSendResult) { LOGGER.info("Producer: success: {}", stringObjectSendResult.toString()); } }); }
在java1.8的環境下,可以不用手動給jsonObj添加 final關鍵詞修飾,而final已經被默認添加final修飾了
詳細原因參看:https://www.cnblogs.com/hapjin/p/5744478.html (使得 訪問 內部類的局部變量,作用域變大了)
