【问题标题】:Java: the final local variable cannot be assigned, since it was defined in an enclosing typeJava:无法分配最终局部变量,因为它是在封闭类型中定义的
【发布时间】:2016-03-15 11:37:39
【问题描述】:

如何解决这个问题?

错误在于@scrollPane 和地图。

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;
});

【问题讨论】:

    标签: java visibility final


    【解决方案1】:

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

    所以唯一的办法就是去掉final关键字。

    关于地图,去掉final关键字,换成这个

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

    【讨论】:

      【解决方案2】:

      您不能在循环中重复分配给final 变量。

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

      map 需要在你进入循环之前被初始化(否则你不能put 里面的任何东西)。

      【讨论】:

        猜你喜欢
        • 2015-02-26
        • 2013-11-30
        • 2020-02-11
        • 2014-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-04
        相关资源
        最近更新 更多