如何userId
在我的匿名内部子类中获取传递给此方法的值?
public void doStuff(String userID) {
doOtherStuff(userID, new SuccessDelegate() {
@Override
public void onSuccess() {
Log.e(TAG, "Called delegate!!!! "+ userID);
}
});
}
我收到此错误:
无法在以其他方法定义的内部类中引用非最终变量userID
我很确定我不能将其赋值为final,因为它是一个未知值的变量。我听说这种语法确实以某种方式保留了作用域,所以我认为必须有一个我不太了解的语法技巧。
当然,您可以将其分配为final-只需将该关键字放入参数的声明中即可:
public void doStuff(final String userID) {
...
我不确定这是一个未知值的变量是什么意思;最终所有的意思是,一旦将值分配给变量,就无法将其 重新
分配。由于您没有在方法中更改userID的值,因此在这种情况下将其最终确定是没有问题的。
问题内容: 我想使用a 对图进行拓扑排序。为简便起见,我想为比较器使用匿名内部类。但是,我需要访问该图才能确定我正在查看的节点的程度。这可能吗? 正确的代码 问题答案: 是的,使其最终化: 有关最终关键字,请参见最终词: 匿名本地课程 第二种情况涉及最终变量,实际上是语言语义所规定的。在这种情况下,除非声明为final,否则Java编译器将不允许您使用变量。这种情况出现在闭包(也称为匿名本地类)中
在此代码示例中,ActionListener的actionPerformed函数中没有使用最终对象jLabel:
问题内容: 为什么我需要声明一个方法,好像我在方法中定义的需要使用它一样? 范例: } 为什么String 需要是最终常量?它如何影响? 问题答案: 答案是两者在不同的范围内。因此该变量可以在内部类访问它之前更改。将其最终确定可以防止这种情况。
问题内容: 我不明白为什么我不能总是从“侦听器”或“处理程序”内部访问变量。 这是我的代码: 唯一的方法是使用关键字声明它: 为什么需要声明变量 final 以获取事件内部的访问权限? 问题答案: 您是一个匿名内部类,我认为这很清楚: 本地类绝对可以引用实例变量。它们无法引用非最终局部变量的原因是,方法返回后,局部类实例可以保留在内存中。当该方法返回时,局部变量超出范围,因此需要它们的副本。如果变
问题内容: Java中匿名类的用途是什么?我们可以说使用匿名类是Java的优势之一吗? 问题答案: 使用某些“额外”(例如覆盖方法)创建对象的实例时,匿名内部类会变得很有用,而不必实际继承一个类。 我倾向于将它用作附加事件侦听器的快捷方式: 使用此方法可以使编码更快一些,因为我不需要创建额外的类来实现我可以实例化一个匿名内部类而无需实际创建单独的类。 我仅将这种技术用于“快速而肮脏的”任务,在这些