Java中匿名内部类可访问的变量

时间:2013-04-19 19:46:13

标签: java anonymous-inner-class

我想使用匿名内部类来处理程序中对象的鼠标操作。但是,根据参数,我希望内部类的行为不同。例如:

Rectangle r1 = rectangleBuilder (Color.Red);
Rectangle r2 = rectangleBuilder (Color.Blue);

public Rectangle rectangleBuilder (final Color c) {
    r = new Rectangle (100, 100, c);

    r.dragListener = new DragListener () {
        @Override
        public void drag (double x, double y) {
            if (c == Color.Red) {
                r.setPosition (x, y);
            }
            if (c == Color.Blue) {
                r.setPosition (2 *x, 2 *y);
            }
        }
    }

    return r;
}

这个想法是,在创建对象时,拖动它时的行为取决于它的颜色。这工作正常,但现在由于某种原因,我得到一个例外,说c(颜色)为空。我想知道这种方法在Java中是否可行。

2 个答案:

答案 0 :(得分:0)

结果证明这是一个与Java完全无关的奇怪问题。枚举Color在另一个碰巧有编译错误的类中。显然Eclipse将每个实例的Color类视为null。

答案 1 :(得分:0)

如果jvm表示存在空指针,则表示指针为空。使用这里的代码,只有一个解决方案,它使用空指针调用。检查堆栈跟踪,您将找到使用null对象调用此方法的位置。

如果指针为空是正常的,则可以定义默认颜色。

if (c == null)
    r = new Rectangle(100, 100, Color.black);

并在drag()方法中处理这种情况。