Может кто-нибудь дать мне решение моей задачи с помощью интерфейса Generics and Comparable? - PullRequest
0 голосов
/ 19 апреля 2019

Я написал половину, но не могу сделать это на 100% правильно.Может ли кто-нибудь помочь мне с этим?

Вот моя проблема:

Напишите параметризованный класс Triple, который представляет трио некоторого типа (например, тройка из строки, целое число и т. Д.),Для класса Triple определите:

-getElement метод, который получает целое число (1,2 или 3) и возвращает соответствующий член.В случае недопустимого аргумента бросьте исключение IllegalArgumentExpression -setElement, которое получает два аргумента: целое число (1, 2 или 3) и значение, которое должно быть помещено как член из трех в соответствующую позицию (например, setElement (2,3) устанавливает 3 в y значение trio) -a конструктора с 3 аргументами, которые устанавливают начальные значения Triple

. Затем вы должны написать класс ComparableTriple, который представляет триплет.Члены триплета должны быть сопоставимы (реализовать Comparable интерфейс).Затем разверните класс ComparableTriple для реализации интерфейса Comparable, чтобы триплеты можно было сравнивать по позициям.Например, (2,6,1) находится в рейтинге до (3,4,5), но позади (2,6, -4).Тот же шаблон можно применить к строке и т. Д.

Пример основного кода:

Triple t1 = new ComparableTriple <> (2, 6, 1);int x = t1.compareTo (t1);// должно быть 0

//Triple class I wrote 

public class Triple<T> {
    T x, y, z;

    public Triple(T x, T y, T z) {
        this.x = x;
        this.y = y;
        this.z = z;
    }
    public T getElement(int position) {
        if (position == 1) {
            return x;
        } else if (position == 2) {
            return y;
        } else if (position == 3) {
            return z;
        } else throw new IllegalArgumentException();
    }
    public void setElement(int position, T value) {
        if (position == 1) {
            x = value;
        } else if (position == 2) {
            y = value;
        } else if (position == 3) {
            z = value;
        } else throw new IllegalArgumentException(); }
}

Я пытался написать переопределенный метод ComparableTriple CompareTo, но не смог найти точное решение.Это не так сложно, но я новичок в Generics и не могу понять некоторые вещи.Кто-нибудь может мне помочь с остальным кодом?

1 Ответ

0 голосов
/ 19 апреля 2019
public class Triple<T> implements Comparable<Triple<T>> {
  ... your code here
// functional interface Comparable will force you to override the method
}

Но вы можете захотеть иметь какой-то суперкласс, который расширяет T, чтобы вы могли получить доступ к полям для сравнения.

Пример:

public class Triple<T extends Number> implements Comparable<Triple<T>>

Конечно, есть встроенное сравнение с Collections.sort (сопоставимым), если вы не хотите связываться с тем, что есть T.

Это должно начать вас. Отправить обратно / редактировать, если вы застряли. Приветствия.

(И это не решение по намерению). Дженерики - это боль, и для достижения успеха нужно пройти через них.

...