我想使用匿名内部类来处理程序中对象的鼠标操作。但是,根据参数,我希望内部类的行为不同。例如:
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中是否可行。
答案 0 :(得分:0)
结果证明这是一个与Java完全无关的奇怪问题。枚举Color在另一个碰巧有编译错误的类中。显然Eclipse将每个实例的Color类视为null。
答案 1 :(得分:0)
如果jvm表示存在空指针,则表示指针为空。使用这里的代码,只有一个解决方案,它使用空指针调用。检查堆栈跟踪,您将找到使用null对象调用此方法的位置。
如果指针为空是正常的,则可以定义默认颜色。
if (c == null)
r = new Rectangle(100, 100, Color.black);
并在drag()方法中处理这种情况。