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