如何将匿名类方法参数返回到原始实例化类?

时间:2011-08-29 02:59:06

标签: java class anonymous-class

这是我的代码:

public void pollLocation()
{
    myLocation.getLocation(this, new LocationResult()
    {
        public void gotLocation(Location location)
        {
            //I want to assign Location object from here...
        }
    });
}

private Location lastLocation; //...to here.

这可能吗?

3 个答案:

答案 0 :(得分:2)

是。通常你可以写

lastLocation = location

但也许LocationResult类/接口也有一个名为lastLocation的字段。在这种情况下,你必须写

OuterClassName.this.lastLocation = location

但是,由于看起来你会进行一些异步轮询,所以没有同步这样做太危险了。你也不会注意到lastLocation何时被设置。所以最好在外部类中使用同步setter。

答案 1 :(得分:1)

您可以使用setter:

public void pollLocation()
{
    myLocation.getLocation(this, new LocationResult()
    {
        public void gotLocation(Location location)
        {
            //I want to assign Location object from here...
            setLastLocation(...);
        }
    });
}

private Location lastLocation; //...to here.
private void setLastLocation(Location l) { lastLocation = l; }

请注意多线程问题。如果您使用多个线程,则最好声明lastLocation volatile或使用AtomicReference。否则,您的代码可能无法按预期工作。

答案 2 :(得分:0)

将lastLocation设为最终java.util.concurrent.atomic.AtomicReference并将其设置为您心中的内容。

(编辑:你确定一个简单的作业不起作用吗?看起来它在Eclipse中有用......)