Я сам изучаю 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));
}
}




вы можете переписать метод следующим образом:
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. Теперь мне кажется, что я «попался». Большое спасибо, это казалось очень важным! Спасибо и за все остальные ответы!
Ваш метод compareSize() может быть просто:
public int compareSize(Animal animal){
return Double.compare(this.size, animal.size);
}
попробуйте:
this.size < animal.size.