无法在原语上调用Equals方法->覆盖Equals方法不起作用-Java中的初学者错误

时间:2019-03-18 17:46:52

标签: java override

在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;
        }

    }

1 个答案:

答案 0 :(得分:2)

简单的语法错误。

equals(Float)other.weight)

应该是

equals((Float) other.weight)

if((Double)(this.price))

应该是

if(((Double)(this.price))

但是为什么要明确地投射它们?