a只能在这里决赛.为什么?如何a在onClick()不将其保留为私有成员的情况下重新分配方法?
private void f(Button b, final int a){
    b.addClickHandler(new ClickHandler() {
        @Override
        public void onClick(ClickEvent event) {
            int b = a*5;
        }
    });
}
如何5 * a点击它返回?我的意思是,
private void f(Button b, final int a){
    b.addClickHandler(new ClickHandler() {
        @Override
        public void onClick(ClickEvent event) {
             int b = a*5;
             return b; // but return type is void 
        }
    });
}
我在Java 8中玩lambdas,我遇到了警告local variables referenced from a lambda expression must be final or effectively final.我知道当我在匿名类中使用变量时,它们必须在外部类中是最终的,但仍然 - 最终和有效最终之间有什么区别?
我正在阅读java中的匿名类,它说你可以访问封闭类的方法,但不能访问局部变量.为什么会这样?我在说这个:
编辑:旧的例子是错误的不反映我的意思.这应该是一个更好的例子,根据它在"访问封闭类的成员"部分http://docs.oracle.com/javase/tutorial/java/javaOO/localclasses.html中所写的内容.
public class MyClass {
    public interface SomeInterface{
        public void someOtherMethod();
    }
    public void someMethod(int someLocalVar) {
        SomeInterface myClass = new SomeInterface(){
            public void someOtherMethod(){
                someLocalVar = 0; // This must be final to work
            }
        }
    }
}
那么这个限制解决有什么问题呢?
鉴于lambda在for循环中的这种情况,我希望计数器i有效地是最终的.
编译器抱怨说我不是最终的,所以我不得不使用i2.
for (int i = 0; i < x.getBooks().size(); i++){
   //The compiler needs i to be effectively final.
   int i2 = i;
   List<Book> books = bookstore.stream()
                    .filter(c -> c.getAuthors().get(i2).equals("xxx"))
                    .collect(Collectors.toList());
}
所以问题是为什么我没有在for循环范围内有效地完成最终,这是最简单的解决方法.