java - 函数访问外部变量

标签 java callback guava final

我有一个函数,可以迭代大量数据集,接收回调(Google 的 Guava 函数)并对数据集的每个项目运行回调:

void processData(..., Function<Item, Void> callback) {
  ...
  for (Item item : data) {
    callback.apply(item);
  }
} 

使用此函数,我想传递一个回调,将所有项目添加到列表或 map 中:

List<Item> itemList;
processData(..., new Function<Item, Void)() {
  @Override public void apply(Item item) {
    itemList.add(item);
  }
});

但是,看来我不能这样做,因为 itemList 不是最终的,而且根据定义也不能是最终的。

这种情况有解决办法吗?或者也许整个模式都是错误的?

最佳答案

您似乎对final关键字的理解不正确。本声明:

final List<Item> itemList = new ArrayList<Item> ();

only 表示 itemList 变量无法重新分配。它不会阻止您修改它指向的对象和此调用:

itemList.add(someItem);

在最终列表中完全有效。不允许的写法是:

itemList = someOtherItemList; //forbidden, itemList is final

关于java - 函数访问外部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14196543/

相关文章:

list - 代码质量/ Guava : clear and fill a final list or assign a new Immutablelist

java - Spring Data Rest 和 Cors

java - ProGuard 不会混淆蓝牙类

jquery - 如何从 Ajax 请求中获取回调函数的值

jquery - 如何在Ajax加载数据表中使用回调函数?

java - 从查询字符串中过滤参数(使用 Guava ?)

java - 不从 List<path> 重新绘制的图像

java - Netbeans 和 Glassfish 部署问题

javascript - 在同一函数内调用函数(异步)

guava - 为什么 Optional 不扩展 Supplier