这个问题很早之前就遇到并且解决了,今天又看到同事出现了,想起来记录下.
这个问题是在使用lamda时候,内部使用外部变量时候出现,例如
String text="";
jsonArray.forEach(res->{
if(((JSONObject)res).containsKey("name")){
text=((JSONObject)res).getString("name");
}
});
这段代码就会报错,因为text这个变量是非final的,但是这时候就有问题了,如果是final的,那怎么能修改值呢?
这里就有个技巧
String[] text={""};
jsonArray.forEach(res->{
if(((JSONObject)res).containsKey("name")){
text[0]=((JSONObject)res).getString("name");
}
});
使用数组就可以解决,我这里是Stirng,其他类型类比就可以了,后面使用的时候直接使用text[0]就可以了