为什么我得到“从内部类引用的局部变量必须是最终的”?
我甚至不确定这个代码是否会做任何事情,即使它有效,但我不知道如何摆脱“从内部类引用的局部变量必须是最终的或有效的最终”错误消息,显示在以“fireballRight [i]”开头的三行上。
Sprite[] fireballRight = new Sprite[50]; public void fireRight() { for(int i = 0; i < 50; i++) { new AnimationTimer() { public void handle() { fireballRight[i].setImage("puercosloco/fireballright.png"); rightx++; fireballRight[i].setPosition(rightx, righty); fireballRight[i].render(gc, 80, 55); } }.start(); } }
任何指导将不胜感激,谷歌似乎没有帮助我这一个。
您没有显示所有代码,但我怀疑添加:
final int i0 = i;
在你的循环中使用i0
而不是i
作为数组的索引应该修复错误。
或者,正如@James_D所评论的那样,你也可以添加Sprite sprite = fireballRight[i];
在匿名类之前,在handle
方法中使用sprite
。
请注意,在Java 8+的情况下, final
修饰符是可选的。
正如它所说,var i
需要有final
前缀。 将代码更改为以下内容: –
for(int i = 0; i < 50; i++) { final int i2 = i; new AnimationTimer() { public void handle() { fireballRight[i2].setImage("puercosloco/fireballright.png"); // Use i2 instead of i.
您可以将字段设为私有和静态。
- 警告:注册Oracle JDBC Diagnosability MBean时出错
- 检测类文件时出错(asm.ClassWriter.getCommonSuperClass)
- 如何从JOptionPane中的String数组中选择索引值
- Java System.getProperty(“user.timezone”)不起作用
- 当CompleteableFuture抛出exception时返回500内部错误
- 如何在自定义反序列化器中使用一些Jackson Deserializer?
- 如何在JASPIC中保存经过身份validation的用户?
- 关于在Java / Spring项目中组织版本化REST API代码的最佳实践(示例?)?
- 如何在网络服务器模式下启动derby并仍然获得嵌入式连接?