Java 变量需要声明为final,但也需要声明为non-final

Java 变量需要声明为final,但也需要声明为non-final,java,android,Java,Android,我有一个例子,我的变量需要作为final访问,但它也需要作为非final访问 这是我的密码: 公共类ShowViewModel扩展了ViewModel{ 公共void设置显示(最终字符串类型、布尔值isFavorite、FavoriteHelper){ AsyncHttpClient=新的AsyncHttpClient(); ArrayList listItems=新的ArrayList(); listItems.clear(); 如果(我最喜欢){ Cursor Cursor=favorite

我有一个例子,我的变量需要作为final访问,但它也需要作为非final访问

这是我的密码:

公共类ShowViewModel扩展了ViewModel{
公共void设置显示(最终字符串类型、布尔值isFavorite、FavoriteHelper){
AsyncHttpClient=新的AsyncHttpClient();
ArrayList listItems=新的ArrayList();
listItems.clear();
如果(我最喜欢){
Cursor Cursor=favoriteHelper.queryAll(类型);
//此分配需要listItems作为非最终变量
listItems=MappingHelper.mapCursorToArrayList(光标);
}否则{
字符串url=String.format(“http://api.dev");
get(url,新的AsyncHttpResponseHandler(){
@凌驾
成功时的公共void(int statusCode,Header[]headers,byte[]responseBody){
试一试{
字符串结果=新字符串(responseBody);
JSONObject responseObject=新JSONObject(结果);
JSONArray结果=responseObject.getJSONArray(“结果”);
对于(int i=0;i
然后,我尝试将listItems作为类的属性移动

public cals ShowViewModel扩展了ViewModel{
private ArrayList listItems=new ArrayList();
公共void设置显示(最终字符串类型、布尔值isFavorite、FavoriteHelper){
...
}
}
它没有显示任何错误,工作得很好。但它会影响我应用程序的另一部分


有解决办法吗?谢谢。

通常的解决方案是使用两个变量。例如:

int i = 0;
while (i < 10) {
   i++;
   executor.submit(new Runnable() {
           public void run() {
                System.out.println(i);  // Compilation Error
           });
}
inti=0;
而(i<10){
i++;
执行者提交(新的可运行(){
公开募捐{
System.out.println(i);//编译错误
});
}
变成:

int i = 0;
while (i < 10) {
   i++;
   final int ii = i;
   executor.submit(new Runnable() {
           public void run() {
                 System.out.println(ii); // OK
           });
}
inti=0;
而(i<10){
i++;
最终int ii=i;
执行者提交(新的可运行(){
公开募捐{
System.out.println(ii);//好的
});
}

您应该能够在代码中使用这种方法。

这里有一个简单的解决方案:

List<Show> cursorList = MappingHelper.mapCursorToArrayList(cursor);
listItems.addAll(cursorList);
List cursorList=MappingHelper.mapCursorToArrayList(光标);
listItems.addAll(光标列表);

你说的变量是什么?如果你要访问数组,可能是集合。unmodifiableList()可以帮助你。@user2342558抱歉,不清楚,是listItem变量将你的
ArrayList listItems
变量声明为类变量,我的意思是在
setShows()
方法之外。