当前位置: 首页 > 面试题库 >

Java Final-一个持久的谜

屈健柏
2023-03-14
问题内容
suggestBox.addKeyUpHandler( new KeyUpHandler() {
  public void onKeyUp(KeyUpEvent event) {
    if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) { 
      String boxText = suggestBox.getText();
      if (!boxText.equals("")) {
        suggestPanel.add(checkBoxFactory(boxText, candidateNames));
        suggestBox.setText("");
      }
    }
  }
});

我无法理解为什么Java迫使我将ArrayListcandiateNames)声明为final。这是为什么?


问题答案:

这是一个内部类,传递给它addKeyUpHandler-内部类外部引用的所有变量都需要声明为final才能在内部类中使用。这是因为本地类实例必须维护变量的单独副本,因为它可能会使函数失效。为了避免在相同范围内混淆两个具有相同名称的可修改变量,该变量被强制为不可修改。

只需final {type} {new-varname} = {old-varname};在调用使用内部类的方法之前执行,然后{new- varname}在内部使用即可。



 类似资料:
  • 我的CN1应用程序在这里生成文件filesystemstorage.getinstance().getapphomePath()。我可以正确地读/写那里的文件。 此文件夹名类似于:- 我如何保证这部分保持不变?谢谢你的帮助。

  • 问题内容: 有没有办法告诉交互式Python Shell在会话之间保留其执行命令的历史? 在会话运行时,执行完命令后,我可以向上箭头访问这些命令,我​​只是想知道是否存在某种方式可以保存一定数量的这些命令,直到下次使用Python Shell时。 这将非常有用,因为我发现自己在上次会话结束时使用的会话中重用了命令。 问题答案: 当然可以,只需一个小的启动脚本。从交互式输入编辑及历史替换在Pytho

  • Akka持久化使有状态的actor能留存其内部状态,以便在因JVM崩溃、监管者引起,或在集群中迁移导致的actor启动、重启时恢复它。Akka持久化背后的关键概念是持久化的只是一个actor的内部状态的的变化,而不是直接持久化其当前状态 (除了可选的快照)。这些更改永远只能被附加到存储,没什么是可变的,这使得高事务处理率和高效复制成为可能。有状态actor通过重放保存的变化来恢复,从而使它们可以重

  • 希望有人能帮助我这个问题,因为我找到的所有答案似乎对我不起作用。 在我的myProj webapp下,我有以下内容 . 我的application-context.xml有这个(application-context.xml有名为hibernate-context和model-context.xml的子XML,但它们一直都很好)

  • 我正在使用网络逻辑10.3。我正在尝试配置一个持久订阅,其中包含由 jdbc 存储(在 Oracle DB 中)支持的持久消息。我有一个主题,MDB 正在作为持久订阅者侦听该主题。在场景-1下:如果我发送消息,它会命中MDB。 在场景2中:我挂起了MDB,希望发送到主题的消息只要不被MDB(它是唯一注册的持久订阅者)使用,就会一直存在。但是当我向主题发送消息时,它短暂地出现在那里,然后就消失了(我

  • 我正在从BinaryFormatter迁移到Protobuf net(到目前为止,它似乎在存储大小和反序列化时间方面都提供了巨大的改进)。 然而,我遇到的一个问题是,这是双重的吗?[]数组的反序列化形式与序列化的形式不同。数组中的任何null值都会被整体删除,即如果我从一个包含6个元素的数组开始[null,null,1,2,3,null],反序列化后,我最终会得到一个数组[1,2,3]。对于我的程