相关疑难解决方法(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万
查看次数

为什么我应该“将 myVariable 转换为最后一个元素数组”?

我正在尝试访问h内部类中的变量,但一直显示错误“无法为最终变量分配值h”。我尝试了快速修复,它指示我“将 h 转换为最后一个元素数组”。这是什么意思?

int Update ()
{
    final int h;
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
    preferences.registerOnSharedPreferenceChangeListener(new SharedPreferences.OnSharedPreferenceChangeListener() {


        @Override
        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {

            if(key.equalsIgnoreCase("PINCODE"))
            {
                h = sharedPreferences.getInt(key,0);

            }
        }
    });

    return h;
}
Run Code Online (Sandbox Code Playgroud)

}

java arrays variables android scope

7
推荐指数
1
解决办法
5276
查看次数

Java 8 Lambda变量范围

我有2个代码示例:

int[] idx = { 0 };
List<String> list = new ArrayList<String>();
list.add("abc");
list.add("def");
list.add("ghi");
list.stream().forEach(item -> {
    System.out.println(idx[0] + ": " + item);
    idx[0]++;
});
Run Code Online (Sandbox Code Playgroud)

好好工作.

虽然此代码有编译错误:

int idx = 0;
List<String> list = new ArrayList<String>();
list.add("abc");
list.add("def");
list.add("ghi");
list.stream().forEach(item -> {
    System.out.println(idx + ": " + item);
    idx++;
});
Run Code Online (Sandbox Code Playgroud)

他说:

Local variable idx defined in an enclosing scope must be final or effectively final.
Run Code Online (Sandbox Code Playgroud)

唯一的区别是idxint或int数组.

根本原因是什么?

java lambda java-8

6
推荐指数
1
解决办法
6725
查看次数

使用Java 8的新API的CollectionUtills进行编译错误

我想用一些包含数量的对象来迭代一个数组并获得totalQuantity,但是使用Java 8的新API代替每个循环的tipical.

这是我到目前为止的方式:

int totalQuantityOrdered=0;
    totalQuantityOrdered=CollectionUtils.isNotEmpty(details)?details.stream().forEach(detail->totalQuantityOrdered+=detail.getOrderHeader().getQuantity()):totalQuantityOrdered;
Run Code Online (Sandbox Code Playgroud)

但是我收到一个编译错误,告诉我为了使用lambda表达式,变量totalQuantityOrdered必须是final.然后我认为当变量是final时意味着它的值不能被修改,所以在这种情况下我如何实现我想要做的事情?

提前告诉你你的时间.

java lambda java-8

1
推荐指数
1
解决办法
53
查看次数