Rectangle对象抛出错误,说它无法在java中找到.contains()方法

时间:2012-11-04 22:25:32

标签: java vector applet rectangles

我正在尝试在mouseClicked中创建一段代码,删除从Vector中单击的任何矩形。所有的矩形都正确地存储在向量中,当我运行程序时,我正在检查的点是有效的。查看文档,确实有一个rectangle.contains(point)方法,所以我不确定为什么以下代码段无效。谢谢!

public void mouseClicked(MouseEvent m)
    {

      Point p = new Point(m.getPoint());
      Vector v = ball.r; //ball.r is where they are put into in another object's method
      boolean done = false;
      int i = 0;

      while (!done)
      {
        if(v.elementAt(i).contains(p))
        {
          v.removeElement(i);
          i--; //prevent i from incrementing
        }
        i++;
      }
    }

我也没有在for循环中这样做,因为据我所知,当一个元素被移除时,向量将“重新包装”,我将跳过向量的一个元素。说/做这个不确定我是对还是错。

3 个答案:

答案 0 :(得分:3)

由于您已将Vector v定义为原始类型向量,因此它不知道其中的元素类型,即v.elementAt(i),因此无法找到与contains()方法匹配的内容。这就是问题的原因。

您有两种选择。在调用Vector方法之前定义type castcontains()元素时使用泛型。

e.g。

 Vector<Rectangle> v  = (Vector<Rectangle>)ball.r;

 if(((Ractangle)v.elementAt(i)).contains(p))

答案 1 :(得分:3)

Java Vector可以用作generic或非通用。并且您使用非泛型。因此,elementAt(int index)方法会返回Object,而不是Rectangle。解决此问题的最简单方法是将返回的Object强制转换为Rectangle对象。像这样,

import java.awt.Rectangle;  // Don't forget the to import

public void mouseClicked(MouseEvent m)
{

  Point p = new Point(m.getPoint());
  Vector v = ball.r;
  boolean done = false;
  int i = 0;

  while (!done)
  {
    if( ((Rectangle)(v.elementAt(i)).contains(p))   // casting
    {
      v.removeElement(i);
      i--;
    }
    i++;
  }
}

更好的解决方案是使用泛型。

import java.awt.Rectangle;

public void mouseClicked(MouseEvent m)
{

  Point p = new Point(m.getPoint());
  Vector<Rectangle> v = ball.r;   // remember, bar.r Vector must be a Vector<Rectagle> 
  boolean done = false;
  int i = 0;

  while (!done)
  {
    if( (v.elementAt(i).contains(p))   // No casting
    {
      v.removeElement(i);
      i--;
    }
    i++;
  }
}

请记住,您可以将泛型集合分配给非泛型引用,但不能将非泛型对象分配给泛型引用。您可以了解泛型here

答案 2 :(得分:2)

C:\Users\Alex\Downloads\Bounce2\Bounce2.java:217: cannot find symbol symbol : method contains(java.awt.Point) location: class java.lang.Object if(v.elementAt(i).contains(p)) 

此错误消息表明编译器正在contains()类中查找Object方法。换句话说,v.elementAt(i)会返回Object,而不是Rectangle。要解决此问题,您需要更改v的声明,如下所示:

Vector<Rectangle> v = ball.r;

希望这有帮助!