在Float和Double括号,权重和价格属性中更具体地覆盖Equals方法时,我遇到了编译错误,HashCode方法似乎有效,所以我不知道问题出在我的代码中。该代码还包含一个Vehicle接口,但我不希望该错误来自该接口。我不确定我是否完全理解Equals方法。有人可以帮我吗?
package info.vehicle;
import java.io.Serializable;
public class Car implements Vehicle,Serializable,Cloneable {
private float weight;
private double price;
private String producer;
public Car()
{
}
public Car(float _weight,double _price,String _producer)
{
weight=_weight;
price=_price;
producer=_producer;
}
public void setProducer(String _producer) throws Exception
{
if(_producer!=null && _producer.length()>1)
this.producer=_producer;
else
{
throw new Exception("Producer must not be null.");
}
}
public void setPrice(double _price) throws Exception
{
if(_price>0)
{
price=_price;
}
else
{
throw new Exception("Price must not be 0.");
}
}
public void setWeight(float _weight) throws Exception
{
if(weight>0)
{
weight=_weight;
}
else
{
throw new Exception("Weight must be different than 0.");
}
}
@Override
public boolean equals(Object obj) {
Car other=(Car)obj;
if(((Float)(this.weight)).equals(Float)other.weight)
{
if((Double)(this.price)).equals((Double)other.price))
{
if(this.producer.contentEquals(other.producer))
{
return super.equals(obj);
}
}
}
return false;
}
@Override
protected Object clone() throws CloneNotSupportedException {
Car temp=new Car();
temp.weight=this.weight;
temp.price=this.price;
temp.producer=this.producer;
return temp;
}
@Override
public int hashCode() {
final int prime=31;
int result=0;
result+=(int)weight*prime;
result+=(int)price*prime;
result+=producer.length()*prime;
return result;
}
@Override
public String infoVehicle() {
return producer;
}
}
答案 0 :(得分:2)
简单的语法错误。
equals(Float)other.weight)
应该是
equals((Float) other.weight)
和
if((Double)(this.price))
应该是
if(((Double)(this.price))
但是为什么要明确地投射它们?