相关疑难解决方法(0)

为什么在匿名类中只能访问最终变量?

  1. a只能在这里决赛.为什么?如何aonClick()不将其保留为私有成员的情况下重新分配方法?

    private void f(Button b, final int a){
        b.addClickHandler(new ClickHandler() {
    
            @Override
            public void onClick(ClickEvent event) {
                int b = a*5;
    
            }
        });
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如何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 
            }
        });
    }
    
    Run Code Online (Sandbox Code Playgroud)

java event-handling anonymous-class

341
推荐指数
7
解决办法
11万
查看次数

最终和有效决赛之间的区别

我在Java 8中玩lambdas,我遇到了警告local variables referenced from a lambda expression must be final or effectively final.我知道当我在匿名类中使用变量时,它们必须在外部类中是最终的,但仍然 - 最终有效最终之间有什么区别?

java lambda final inner-classes java-8

329
推荐指数
7
解决办法
16万
查看次数

为什么匿名类不能访问其封闭类的变量?

我正在阅读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
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

那么这个限制解决有什么问题呢?

java closures class

18
推荐指数
2
解决办法
4080
查看次数

Java lambda - for for循环计数器不是最终的

鉴于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());
}
Run Code Online (Sandbox Code Playgroud)

所以问题是为什么我没有在for循环范围内有效地完成最终,这是最简单的解决方法.

java lambda for-loop java-8

5
推荐指数
3
解决办法
5016
查看次数