Как я могу сравнить универсальные типы в Java?

#java #interface #compareto

#java #интерфейс #compareto

Вопрос:

Привет всем, я застрял на сравнении общих типов в Java.

 public class Odev1LinkedList<T extends Comparable<T>> extends AbstractLinkedList<T>{
    /**
     * Bir listede elemanları uygun konuma ekler. Boş bir listeye elemanlar eklendikten
     * sonra küçükten büyüğe sıralı olur
     * @param value eklenecek değer
     */
    @Override
    public void insertInOrder(T value) {
        Node current = this.getHead();
        Node previous = new Node<>(null,null);
        if(current == null){
            addFirst(value);
            return;
        }
        while(current != null){
            if(current.value >= value){
                if(current == this.getHead()){
                    addFirst(value);
                    return;
                }
                Node newNode = new Node<>(value,current);
                previous.next = newNode;
                return;
            }else if(current.next == null){
                addLast(value);
                return;
            }
            previous = current;
            current = current.next;
        }
    }
  

Я застрял на этой строке, если (current.value> = value) … Поскольку иногда мое значение приходит строкой, иногда приходит целым числом, этого блока достаточно для сравнения целого числа, но не подходит для строки, как я могу решить эту проблему.

Мои методы работают как добавление узла по порядку -> Если у вас есть такой связанный список {1,2,4} и когда вы используете этот метод для добавления нового узла, значение которого равно 3. Ваш последний связанный список должен быть таким {1,2,3,4}

 {1,2,3,4} -> inserInOrder(5) -> {1,2,3,4,5}
{1,2,3,4} -> inserInOrder(0) -> {0,1,2,3,4}
{1,2,3,4} -> inserInOrder(2) -> {1,2,2,3,4}
  

И мне нужно сделать то же самое для списка, связанного со строкой. -> {«A», «B»,»D»} ; inserInOrder(«C») -> {«A», «B»,»C», «D»}

Комментарии:

1. Вы смотрели Comparable документацию?

2. if(current.value.compareTo(value) >= 0){

3. я не могу достичь метода compareTo

4. Пожалуйста, предоставьте определение класса Node .

5. я не меняю определение узла, оно хранится на сервере моего учителя

Ответ №1:

Я думаю, вы можете использовать блок «try-catch». Во-первых, в блоке «try» вы пытаетесь присвоить свое значение переменной типа String . Если все в порядке, то ваш код выполняется дальше, где вы пишете сравнение соответствия строковой логике. Но если это не так, то генерируется ClassCastException, которое перехватывается блоком «catch», в котором, в свою очередь, вы пытаетесь присвоить значение переменной типа if Integer, а затем выполнить требуемую логику. Что-то вроде этого:

 try {
String variable = value
//String logic
} catch (Exception ClassCastException) {
int variable = value
//Integer logic
}