变量在内部类中访问。需要宣布最终。但我不想宣布决赛

时间:2018-01-08 16:18:18

标签: java android variables inner-classes

我初学编程Android,我声明Boolean flag,我想在内部类和return flag中设置为true或false,但android studio说你应该声明最终!!!我不要&# 39; t想要声明final,因为我在变量flag中设置了true或false。 我的问题是,我应该做什么In the picture, you know

5 个答案:

答案 0 :(得分:1)

您可以通过声明一个数组来执行此操作:

>>> stringkeys = [ str(key) for key, val in d.iteritems() if 'str' in str(val.__class__)]

>>> dtype = [(str(key), val.__class__) for key, val in d.iteritems() if not 'str' in str(val.__class__)] + [(key, 'S128') for key in stringkeys]

>>> dtype
[('a', <type 'float'>), ('c', <type 'int'>), ('b', <type 'float'>), ('d', <type 'numpy.ndarray'>), ('text', 'S128')]

在你的onResponse中设置值:

final boolean[] flag = {false};

当您点击帮助工具提示时,Android Studio会自动提出此解决方案。

答案 1 :(得分:1)

尝试将布尔值设为全局,就像在类外声明它一样。

答案 2 :(得分:1)

您无法在进行异步调用的方法中返回布尔值以检索该返回值。

而是在此类中创建一个接口,并在该方法签名中包含该接口的内联实现,并在成功或错误时回调。

public class yourHTTPClass{
    public void yourMethod(myCallbacks callback){
         doAsyncCall(){
              onSuccess(){
                   callback.onSuccess();
              }
         }
    }
    public interface myCallbacks{
         onSuccess();
         onError();
    }
}

public class OtherClass{
    yourHTTPClassInstance.yourMethod(new myCallbacks(){
         @Override
         public void onSuccess(){

         }
         @Override
         public void onError(){

         }
    }
}

以上是PSEUDO CODE。不要复制并粘贴它。不要指出它没有编译lol。只显示回调的实现:)。希望有所帮助。

答案 3 :(得分:1)

回答您的字面问题:

内部类真的无法访问外部变量(例如flag),Java只会创建幻觉的访问权限。

从技术上讲,从实例化内部类的那一刻起,您将获得一个名为flag的字段(由编译器自动创建),其中包含flag变量内容的副本 。它类似于将flag作为附加参数传递给构造函数并将其存储在同名的本地字段中。

但是,为了不破坏对flag变量的访问的幻觉,Java禁止您更改flag,因为从技术上讲,只有本地字段可以更改,不是外部变量。

因此,该部分的解决方案(已经被其他人提及)是使用boolean[] flagHolder = new boolean[1];并使用flag[0]进行通信。

但这对您的用例无济于事。

调用onResponse()方法时(收到回复时),您的https()方法很可能已经返回,因此无法看到后续响应可能导致的任何内容

一些正式的评论:

请不要将代码显示为屏幕截图(这是针对stackoverflow规则),而是将其作为文本复制到您的问题中。这使我们更容易进行自己的测试和改进......

答案 4 :(得分:0)

您正在执行的请求是异步的,这意味着它将始终返回false。调用result方法时,该值已经返回。使用回调方法来获取异步调用的结果