在WebView的子类中,我将其放在getTitle()的重写方法中:

      @Override
      public String getTitle() {
        Activity a = getVoTts().getActivity();
        a.runOnUiThread(new Runnable() {
            public void run() {
                String tit = VoWebView.super.getTitle();
            }
        });


       String title = tit;  // this is what I WANT to do, it won't compile of course
       ...
       ...
      }

但是String tit是在匿名Runnable类中关闭的,因此当然不能在该方法下访问。

是否有任何技术或“技巧”可以让我将在匿名Runnable类中获得的值传递给语句(使用相同方法)或将其分配给数据成员?

最佳答案

一种方法是声明一个实例字段并在整个类中使用它。例如:

private String someText;

// ...

@Override
public String getTitle()
{
    Activity a = getVoTts().getActivity();
    a.runOnUiThread(new Runnable()
    {
        public void run()
        {
            someText = VoWebView.super.getTitle();
        }
    });
}

编辑:

关于为什么必须将局部变量声明为final的原因(换句话说,就是编译时间常数):

假设以下内容在Java中有效:
@Override
public String getTitle()
{
    Foo f = new Foo();

    Button b = getButtonReference();
    b.setOnClickListener(new OnClickListener()
    {
        public void onClick(View v)
        {
            Boo o = f.someMethod();
        }
    });

    f = null;
}

f = null处,foo对象将有资格进行垃圾收集。因此,如果单击该按钮,对于VM来说,在foo对象上调用someMethod()为时已晚,因为它已被垃圾收集!

10-04 11:06