【问题标题】:Can I use the contains method on every object?我可以在每个对象上使用 contains 方法吗?
【发布时间】:2016-08-12 00:57:03
【问题描述】:

contains 方法可以用于我自己编写的类的实例吗?

我创建了一个名为Ana 的类,在另一个类中,我创建了它的两个实例,分别称为cookiemaccaroni。这是其中之一:

Ana cookie = new Ana(cc.c, 20, 450);

在某些时候我试图调用

if (maccaroni.contains(cookie.image(), cookie.xi(), cookie.yi())
{
    return true;
}

但 Netbeans 将其下划线表示错误。当我将鼠标悬停在它上面时,它说:

no suitable method found for contains(Image,int,int)
    method Component.contains(int,int) is not applicable
      (actual and formal argument lists differ in length)
    method Component.contains(Point) is not applicable
      (actual and formal argument lists differ in length)
    method JComponent.contains(int,int) is not applicable
      (actual and formal argument lists differ in length)

为什么下面的代码被Netbeans认为是错误的?

这是我指的类。

import java.awt.Graphics;
import java.awt.Image;
import javax.swing.JComponent;

public class Ana extends JComponent
{
    public static Image p;
    public static int xx;
    public static int yy;

    public Ana(Image io, int x, int y)
    {
        p = io;
        xx = x;
        yy = y;
        repaint();
    }

    @Override
    public void paint(Graphics g)
    {
       g.drawImage(p, xx, yy, null);
    }


    public Image image()
    {
        return p;
    }

    public int xi()
    {
        return xx;
    }

    public int yi()
    {
        return yy;
    }
}

【问题讨论】:

  • "这段代码有什么错误" 为什么你认为有错误?您收到任何错误消息吗?你能把它包括在你的问题中吗?
  • @Parta maccaroni 是什么类型的东西?
  • JComponent.contains(int x, int y) 接受两个整数参数。但我不知道maccaroni 是不是JComponent
  • 顺便说一句,你确定你的字段应该是static吗?你知道static 是什么意思吗?也很可能他们应该是private
  • @Pshemo 我已经纠正了这个问题。我正在使用 JComponent 类的 contains 方法。

标签: java methods contains


【解决方案1】:

Ana 中没有定义 contains() 方法。在JComponent 中定义了一个contains() 方法。它需要两个整数。您正在尝试使用图像和两个整数来调用它。你大概可以通过这样写得到你需要的东西:

if (maccaroni.contains(cookie.xi(), cookie.yi())
{
    return true;
}

所以这段代码中的错误类型是:这是一个编译错误。 NetBeans 不只是在它下划线,屏幕上的某处会显示一条消息,告诉您出了什么问题。您可能必须将鼠标悬停在下划线上或查看屏幕的不同部分——我不经常使用 NetBeans,所以我记不太清了——但我向你保证该消息就在那里。

不,你不能在 any 对象上调用 contains(),只能在类定义了 contains() 方法(带有适当参数)的对象上调用,或者从一个对象继承这样的方法他们的超类型(来自他们实现的祖先类或接口)。

所有对象都可以使用的方法是继承自java.lang.Object 类的方法,因为所有类都显式或隐式扩展它(父类的父类...最终需要扩展Object 类)。

但是java.lang.Object 上没有定义contains(Image, int, int) 方法。唯一可用于Ana 类实例的contains() 方法是从JComponent 继承的方法contains(int, int)。如您所见,它接受两个 int 参数,这会阻止您将其与额外的 Image 参数一起使用。

顺便说一句,正如@PShemo 所指出的,您的字段pxxyy 应该很可能是private,而且绝对不是static

【讨论】:

  • 我编辑了你的答案(我试图澄清一点)。如果您不喜欢我的机会,请随时回滚我的编辑。
猜你喜欢
  • 1970-01-01
  • 2021-09-14
  • 2020-07-11
  • 2011-07-24
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 2014-03-06
  • 1970-01-01
相关资源
最近更新 更多