Не может вызвать метод Equals для примитивов-> Метод Override Equals не работает - ошибка новичка в Java

Я получил ошибки компиляции при переопределении метода Equals, в частности, в круглых скобках Float и Double, атрибутах веса и цены, метод 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;
        }

    }

Какие именно ошибки компиляции? Можете ли вы добавить сообщение об ошибке? Также было бы очень полезно, если бы вы отформатировали метод equals, чтобы было легче увидеть, какой блок принадлежит какой скобке.

OH GOD SPIDERS 18.03.2019 18:49

Какую именно ошибку вы получаете?

vs97 18.03.2019 18:50

Джошуа Блох рассказывает вам, как правильно переопределить equals и hashCode в «Эффективной Java», глава 3: fpl.cs.depaul.edu/jriely/ds2/extras/Chapter3.pdf

duffymo 18.03.2019 19:18

Я бы не советовал вам реализовывать интерфейсы Serializable и Cloneable. Ваш учитель просит вас делать то, чего современные практикующие не делают. Никто не выполняет сериализацию в байт-код Java; лучше сериализовать в JSON или XML. Лучше написать конструктор копирования, чем клонировать; это винтажный интерфейс 1995 года, в котором было много проблем. Так больше никто не делает.

duffymo 18.03.2019 19:20
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
36
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Простые синтаксические ошибки.

equals(Float)other.weight)

Должно быть

equals((Float) other.weight)

а также

if ((Double)(this.price))

должно быть

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

Но почему вы явно их бросаете?

@Корина, ладно. Ну ты хоть разобрался :)

LppEdd 18.03.2019 18:55

@Corina, если вам действительно нужно их разыграть, используйте примитивные (плавающие, двойные), а не обертки (плавающие, двойные).

LppEdd 18.03.2019 19:01

Большое спасибо, ваши инструкции действительно сэкономили мне время и нервы, и извините, что не проголосовал за ответ до того, как вы сказали мне.

Corina 18.03.2019 20:28

@Корина, нет проблем, не беспокойся об этом.

LppEdd 18.03.2019 20:29

Другие вопросы по теме