Member 13817481 Ответов: 3

Я не понимаю, почему мы бросили другой объект в foo?


public class Foo{
   private int data;

   public boolean equals(Object other){
     if(!(other instanceof Foo)){
         return false;
     }
     Foo f = (Foo) other; 
     return this.data == f.data;
   }
}

Я не могу этого понять, я не знаю, почему мы должны бросать объект, если это экземпляр Foo, то нет никакой необходимости бросать его

Что я уже пробовал:

Я не могу этого понять, я не знаю, почему мы должны бросать объект, если это экземпляр Foo, то нет никакой необходимости бросать его

3 Ответов

Рейтинг:
2

Thomas Daniels

Действительно, Вы знаете наверняка, что other это Foo потому что в противном случае метод вернулся бы false уже.

Компилятор, однако, этого не знает - он просто следует инструкциям, которые вы ему даете, он не "рассуждает" о вашем коде. Для компилятора это просто Object что вы должны бросить на а Foo прежде чем вы сможете использовать Foo поля, потому что, опять же, он не пытается рассуждать о вашей логике.


Maciej Los

5ed!

Thomas Daniels

Спасибо!

Рейтинг:
1

Maciej Los

Что ж... Метод Java equals() [^] определяет, равен ли объект, вызывающий метод, объекту, передаваемому в качестве аргумента.

Причина кастинга other объект как Foo есть один, самый важный: вы должны определить, если other это тип Foo чтобы иметь возможность сравнивать data (Fooчлен клуба). Вот и все!


Рейтинг:
0

Wendelius

Если ты не бросишь other вводить Foo, вы не сможете получить доступ к членам группы. Foo класс. У вас есть только доступ к чему Object класс разоблачает. Ведь параметр определяется как объект.


Maciej Los

5ed!