Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检查未设置的对象是否具有属性_Java_Class_Attributes - Fatal编程技术网

Java 如何检查未设置的对象是否具有属性

Java 如何检查未设置的对象是否具有属性,java,class,attributes,Java,Class,Attributes,我试图形成一个方法来调用一个对象,以检查它是否包含类中的某些属性 这是我到目前为止尝试过的代码 public class BoundingBox { public int x, y, width, height; public BoundingBox() { } public Integer getX() { return x; } public void setX(Integer x) { this.x

我试图形成一个方法来调用一个对象,以检查它是否包含类中的某些属性

这是我到目前为止尝试过的代码

public class BoundingBox {

    public int x, y, width, height;

    public BoundingBox() {

    }

    public Integer getX() {
        return x;
    }

    public void setX(Integer x) {
        this.x = x;
    }

    public Integer getY() {
        return y;
    }

    public void setY(Integer Y) {
        this.y = y;
    }

    public boolean contains(int x, int y) {
        if (x == getX() & y == getY()) {
            return true;
        } else {
            return false;
        }
    }
}

但是,当我创建了所有属性值均为10的对象,并使用object.contains(15,15)对其进行测试时,在Java中它不会返回false,运算符
&
可能具有不同的含义:

  • 按位运算符
  • &&
    逻辑运算符
在if语句
if(x==getX()&y==getY()){
中,您使用了
&
位运算符,而不是
&&
逻辑运算符
另外,
setY
方法中有一个输入错误,正如@alvinavord所说,将
int
Integer
进行比较可能会产生意想不到的结果

像这样更改代码,它将工作:

public class BoundingBox {

    public int x, y, width, height;

    public BoundingBox() {

    }

    public Integer getX() {
        return x;
    }

    public void setX(Integer x) {
        this.x = x;
    }

    public Integer getY() {
        return y;
    }

    public void setY(Integer y) {
        this.y = y;
    }

    public boolean contains(int x, int y) {
        return getX().equals(x) && getY().equals(y);
    }
}

替代代码 或者,如果没有特别的理由保留
整数
变量,您可以这样更改代码:

public class BoundingBox {

    public int x, y, width, height;

    public BoundingBox(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public boolean contains(int x, int y) {
        return getX() == x && getY() == y;
    }
}

您在contains中的测试缺少一个符号AND,它应该是&&而不是&。单个符号AND是位AND,而不是逻辑AND。

您的
setY
方法有一个错误:

 public void setY(Integer Y) {
        this.y = y;
 }
Y是大写字母,这就是为什么
this.Y=Y
不起作用的原因。这行代码毫无意义,这就是为什么在
contains()
方法中比较Y时得到false的原因。 将其更改为:

 public void setY(Integer y) {
            this.y = y;
 }

比较int和Integer也有一些问题。最好为getter返回int。

这并不能解释为什么他的测试返回true。@Joe,他的测试总是返回false,而不是true(仅当y等于0且此.x=x时);Bitwise&operator在本例中的作用正如作者所期望的。对,我在回答中指出了这一点。如果文件被声明为int,为什么方法中会有整数参数而不仅仅是int?嗯,他没有说明它们存在的原因,所以我保留了它们。但就我个人而言,我不认为它们是needed。我已将代码更改为此,但即使输入了正确的x和y值,该方法仍会得到错误的结果。它仅在0时返回true?@hh\u vv我猜
x
y
在代码中没有正确初始化。我已更新了备用代码。我已亲自测试过,它是否有效。请告诉我它是否有效把这个问题告诉你。