Java 说我必须返回布尔值?

Java 说我必须返回布尔值?,java,Java,说我必须返回一个布尔值,但我是,我在告诉编译器返回true 您没有沿着函数的所有路径返回某些内容 如果obj不是这个,也不是Circle的实例,那么这个函数不会返回任何内容 您可能需要的函数如下所示: @Override public boolean equals(Object obj){ if(obj == this){ return true; } if(obj instanceof Circle){ Circle circle = (

说我必须返回一个布尔值,但我是,我在告诉编译器返回true

您没有沿着函数的所有路径返回某些内容

如果
obj
不是这个,也不是Circle的实例,那么这个函数不会返回任何内容

您可能需要的函数如下所示:

@Override
public boolean equals(Object obj){
    if(obj == this){
        return true;
    }
    if(obj instanceof Circle){
        Circle circle = (Circle) obj;
        if(circle.getWidth()==getWidth())
            return true;
    }

您没有沿着函数的所有路径返回某些内容

如果
obj
不是这个,也不是Circle的实例,那么这个函数不会返回任何内容

您可能需要的函数如下所示:

@Override
public boolean equals(Object obj){
    if(obj == this){
        return true;
    }
    if(obj instanceof Circle){
        Circle circle = (Circle) obj;
        if(circle.getWidth()==getWidth())
            return true;
    }

所有路径都必须返回。您不能定义一个“不总是”返回您所说的值的方法。(至少不像Java那样使用强类型语言)。问题是,如果给定的对象是一个圆,如果它与这个对象(实例)具有相同的宽度,那么它就是同一个对象。但是你从来没有告诉编译器如果对象不是圆怎么办?或者它是一个,但是没有相同的宽度

解决这个问题的正确方法是在if语句中添加else子句,将其转换为扩展if语句。让我们来看一看:

@Override
public boolean equals(Object obj){
    if(obj == this){
        return true;
    }
    if(obj instanceof Circle){
        Circle circle = (Circle) obj;
        if(circle.getWidth()==getWidth())
            return true;
    }
    return false;
}
如果有任何疑问,你可以亲自给我留言。如果你继续问这样的问题,人们会投票否决你,让你被遗忘。直接寄给我,我会给你答案(如果我醒着知道答案的话),或者为了你,我会冒着我自己的名誉的风险,以防我不知道答案,因为我还有一点点空闲


卡洛斯,你能让我休息一下吗?不知道怎么会有4个空间。我不想引起同情或任何其他感觉,我只是想帮助别人,而不是炫耀。我经常是错的,这就是为什么我也认同错的人。不仅是模糊的错误,而且是基本的错误。无论人们的问题是什么,他们都应该得到尊重和实际的答案。只是我个人的想法,我希望它不会干扰网站?

所有路径都必须返回。您不能定义一个“不总是”返回您所说的值的方法。(至少不像Java那样使用强类型语言)。问题是,如果给定的对象是一个圆,如果它与这个对象(实例)具有相同的宽度,那么它就是同一个对象。但是你从来没有告诉编译器如果对象不是圆怎么办?或者它是一个,但是没有相同的宽度

解决这个问题的正确方法是在if语句中添加else子句,将其转换为扩展if语句。让我们来看一看:

@Override
public boolean equals(Object obj){
    if(obj == this){
        return true;
    }
    if(obj instanceof Circle){
        Circle circle = (Circle) obj;
        if(circle.getWidth()==getWidth())
            return true;
    }
    return false;
}
如果有任何疑问,你可以亲自给我留言。如果你继续问这样的问题,人们会投票否决你,让你被遗忘。直接寄给我,我会给你答案(如果我醒着知道答案的话),或者为了你,我会冒着我自己的名誉的风险,以防我不知道答案,因为我还有一点点空闲

卡洛斯,你能让我休息一下吗?不知道怎么会有4个空间。我不想引起同情或任何其他感觉,我只是想帮助别人,而不是炫耀。我经常是错的,这就是为什么我也认同错的人。不仅是模糊的错误,而且是基本的错误。无论人们的问题是什么,他们都应该得到尊重和实际的答案。只是我个人的想法,我希望它不会干扰网站?

请仔细阅读。它清楚地写着:

它是对称的:对于任何非空参考值x和y,
x.equals(y)
应返回true,当且仅当
y.equals(x)
返回true时

因此,不幸的是,任何基于MyClass类型条件的非final类的实现最终都会违反该规则

假设您通过
FilledCircle
扩展
Circle
,它有一个新字段
backgroundColor
,并实例化一个
Circle x
,宽度为1,背景颜色为红色的
FilledCircle y
。当执行
equals
时,如其他答案中所建议的
x.equals(y)
将产生
true
,因为
y
圆的一个实例,且宽度相同。但是
y.equals(x)
将产生
false
,因为
x
不是
FilledCircle
的实例

正确的实现应该是这样的(由Eclipse生成,非常详细,但如果您不想违反
equals
-方法的约定,则应该是这样的:

@Override
public boolean equals( Object obj ) 
{
    if( obj == this )
    {
        return true;
    }
    else if( obj instanceof Circle )
    {
        Circle circle = ( Circle ) obj;
        if( circle.getWidth( ) == getWidth( ) )
            return true;
    }
        return false; //this is what's missing, now the compiler knows what to do
    }
}
请仔细阅读,上面清楚地写着:

它是对称的:对于任何非空参考值x和y,
x.equals(y)
应返回true,当且仅当
y.equals(x)
返回true时

因此,不幸的是,任何基于MyClass
类型条件的非final类的实现最终都会违反该规则

假设您通过
FilledCircle
扩展
Circle
,它有一个新字段
backgroundColor
,并实例化一个
Circle x
,宽度为1,背景颜色为红色的
FilledCircle y
,如其他答案
x中建议的那样ls(y)
将产生
true
,因为
y
圆的一个实例,并且宽度相同。但是
y.equals(x)
将产生
false
,因为
x
不是
填充圆的实例

正确的实现应该是这样的(由Eclipse生成,非常详细,但如果您不想违反
equals
-方法的约定,则应该是这样的:

@Override
public boolean equals( Object obj ) 
{
    if( obj == this )
    {
        return true;
    }
    else if( obj instanceof Circle )
    {
        Circle circle = ( Circle ) obj;
        if( circle.getWidth( ) == getWidth( ) )
            return true;
    }
        return false; //this is what's missing, now the compiler knows what to do
    }
}

考虑一下,如果<代码> Obj>代码>不等于<代码> > < <代码> >代码> Obj>代码>不是<代码>循环<代码>