Как правильно реализовать интерфейс с методом, который имеет Object в качестве аргумента? - PullRequest
0 голосов
/ 27 февраля 2019

Я пишу программу, которую наш профессор дал нам в качестве домашней работы.

У меня есть класс с именем Car, который имеет два частных реальных члена x и y, которые должны представлять координаты автомобиля в координатной плоскости, и я хотел реализоватьинтерфейс под названием MyInterface, в котором я объявил метод public boolean compare(Object t).Было заявлено, что это должно быть Object t, а не что-то еще, чтобы я мог реализовать интерфейс в нескольких классах (часть домашней работы).Java является языком программирования, о котором идет речь.

Проблемная часть кода выглядит следующим образом:

public interface MyInterface {
      public boolean compare(Object t);
}


public class Car implements MyInterface{

      private double x, y;

      @Override
      public boolean compare(Car t) {
          double curdist = Math.sqrt(this.x*this.x + this.y*this.y);
          double givdist = Math.sqrt(t.x*t.x + t.y*t.y);
          if(curdist < givdist) return true;
          else return false;
    }

}

Мой метод compare должен вычислить расстояния от точки (0,0) для текущего автомобиля и данного автомобиля, и сравнить два расстояния.Если расстояние текущего автомобиля (curdist) ближе от расстояния данного автомобиля (givdist) к (0,0), compare возвращает значение true, в противном случае возвращается значение false.

Мой вопрос таков:Как правильно реализовать этот метод в классе автомобилей?Я попробовал несколько вещей, но ни одна из них не сработала.Любая помощь приветствуется, потому что я новичок в объектно-ориентированном программировании.Заранее спасибо.

1 Ответ

0 голосов
/ 27 февраля 2019

Если в качестве типа параметра для compare необходимо указать Object, необходимо проверить класс передаваемого параметра, чтобы убедиться, что это Car.

Изменить compare аргумент Object в вашем Car классе.Тогда аннотация @Override определит, что метод правильно переопределяет метод экземпляра, и вы не получите ошибку компилятора.Используйте оператор instanceof, чтобы определить, является ли t Car.Вы можете решить бросить IllegalArgumentException, если это не Car или null.Затем вы можете привести его к Car и продолжить работу с логикой вашего метода.

Даже если вам нужно, чтобы это заняло Object для вашего класса, лучший способ сделать это в общем случаес дженериками.Здесь это ответило бы на вопрос «Чем этот класс сопоставим с ?».Если вы рассмотрели дженерики, вы можете понять класс, который определен как MyInterface<T>Метод compare будет принимать параметр типа T.Это позволяет реализовать метод в Car с параметром типа Car, при условии Car implements MyInterface<Car>.Это похоже на существующий интерфейс Comparable, встроенный в Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...