【问题标题】:Access instance from inline override method从内联覆盖方法访问实例
【发布时间】:2026-01-28 06:35:02
【问题描述】:

我有来自第三方组件的类,我需要从onTap 访问poleMarker,但它是空的,我无权访问它:

Marker poleMarker = new Marker(markerPoint,myBitmap),0,0) {
                    @Override
                    public boolean onTap(org.mapsforge.core.model.LatLong tapLatLong, Point layerXY, Point tapXY) 
                    {
                        // poleMarker is null here and I need it :)
                        lastTappedMarker = poleMarker;
                    }
}

【问题讨论】:

    标签: java class overriding instance


    【解决方案1】:

    您不能在以不同方法定义的内部类中引用非最终变量(这是编译器错误,我自己无法更好地解释它......)。您应该为此使用this

    Marker poleMarker = new Marker(markerPoint,myBitmap),0,0) {
        @Override
        public boolean onTap(org.mapsforge.core.model.LatLong tapLatLong, Point layerXY, Point tapXY) 
        {
             lastTappedMarker = this;
        }
    }
    

    【讨论】:

      【解决方案2】:

      由于您在嵌套类中,您可以简单地使用关键字“this”。 应该对应同一个实例。

      lastTappedMarker = this;
      

      【讨论】: