Java сравнивает объекты с одним параметром

Я сам изучаю Java и не совсем понимаю эту проблему. Допустим, у меня есть два объекта, и я хочу сравнить их в методе. Как мне это сделать, не меняя количество параметров в методе?

Кажется, я не могу передать параметр другого животного в метод, так как он принимает только параметр. Это как-то связано с аналогами?

public class Animal {
  private double size;
  private double length;

  public Animal(double size, double length) {
    this.size = size;
    this.length = length;
  }

  public compareSize(Animal animal) {
    //if (dog.size <  animal.size)
      //return 0;
    //return 1;
  }

  public static void main(String[] args) {
    Animal cat = new Animal(100.0,30.1);
    Animal dog = new Animal(200.0, 09.5);
    System.out.println(dog.compareSize(cat));
  }
}

попробуйте: this.size < animal.size.

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

Ответы 3

вы можете переписать метод следующим образом:

public int compareSize(Animal animal){
if (this.size < animal.size){
    return -1;
}else if (this.size > animal.size){
    return 1;
}
return 0;
}

Здесь происходит следующее: когда вы используете this, это ссылка на размер объекта, в котором вызывается метод. то есть, если вы делаете dog.compareSize(cat), вы вызываете compareSize в объекте собаки. следовательно, this.size внутри объекта собаки вернет 200.0

если бы вы сделали cat.compareSize(dog), this.size вернул бы 100.0

Как бы вы использовали это

public static void main(String[] args){
    Animal cat = new Animal(100.0,30.1);
    Animal dog = new Animal(200.0, 09.5);
    System.out.println(dog.compareSize(cat)); 
}

Хотя с точки зрения стандарта кодирования использование компаратора было бы лучше, вы можете узнать больше о компараторах здесь: https://www.baeldung.com/java-comparator-comparable, но вам нужно будет передать два параметра в компаратор.

Вы определяете метод compareSize в классе Animal.

В Java (и во всех других языках ООП), когда вы вызываете метод для объекта, этот объект доступен с помощью ключевого слова this.

Когда вы вызываете dog.compareSize(cat), вы вызываете compareSize свой объект dog, поэтому в вашем методе this будет ссылаться на объект dog.

Таким образом, вам нужно сравнить this.size и animal.size.

Интерфейс Сопоставимые не имеет к этому никакого отношения. Интерфейс Comparable позволяет сравнивать ваш класс, определяя метод compareTo. Требуется использовать полезные методы, такие как Коллекции.sort().

Кроме того, вам нужно определить тип возвращаемого значения в вашем методе compareSize, его сигнатура должна быть: public int compareSize (животное животное)

О, я вижу. Отсутствие возвращаемого типа в методе было опечаткой, но я немного запутался со ссылкой .this. Теперь мне кажется, что я «попался». Большое спасибо, это казалось очень важным! Спасибо и за все остальные ответы!

LMRP 04.03.2019 21:08

Ваш метод compareSize() может быть просто:

public int compareSize(Animal animal){
    return Double.compare(this.size, animal.size);
}

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