Java:无法分配最终的局部变量,因为它是在封闭类型中定义的

时间:2015-12-10 00:29:08

标签: java visibility final

如何解决这个问题?

错误在于@ scrollPane和map。

scrollPane错误:无法分配最终的局部变量,因为它是在封闭类型中定义的

映射错误建议:初始化变量。

final Map<ItemType, JScrollPane> viewScrollPanes = new HashMap<ItemType, JScrollPane>();
final JScrollPane scrollPane;
final Map<ItemType, JScrollPane> map;
this.viewList.forEach((type, list) -> {
  list.setSelectionMode(0);
  list.setVisibleRowCount(5);
  list.putClientProperty("type", type);
  list.setCellRenderer(this.itemRenderer);
  list.setName(String.valueOf(type.toString()) + "List");
  scrollPane = new JScrollPane(list);
  scrollPane.setMinimumSize(new Dimension(0, 110));
  scrollPane.setName(type.toString());
  map.put(type, scrollPane);
  return;
});

2 个答案:

答案 0 :(得分:4)

您无法在循环中重复分配final变量。

看起来scrollPane应该是每次迭代中的局部变量。

在进入循环之前需要初始化

map(否则你不能put中的任何内容。

答案 1 :(得分:0)

你做不到。 您定义了一个最终变量,您只能存储一个最终对象。 你做了一个for循环,并且对于每次迭代,你尝试在scrollpane中分配一个新对象,但该变量被标记为最终对象。

所以唯一的方法是删除final关键字。

关于地图,删除最终关键字并将其改为

Map<ItemType, JScrollPane> map = new HashMap<>();