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;
}
});
}
Run Code Online (Sandbox Code Playgroud)如何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 8中玩lambdas,我遇到了警告local variables referenced from a lambda expression must be final or effectively final.我知道当我在匿名类中使用变量时,它们必须在外部类中是最终的,但仍然 - 最终和有效最终之间有什么区别?
我正在尝试访问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)
}
我有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数组.
根本原因是什么?
我想用一些包含数量的对象来迭代一个数组并获得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时意味着它的值不能被修改,所以在这种情况下我如何实现我想要做的事情?
提前告诉你你的时间.