Java: использование одного метода для разных типов в параметре массива - PullRequest
0 голосов
/ 09 февраля 2011

Я просто не могу понять это, может быть, вы можете мне помочь.

Проблема:


public class class1 implements Comparable<class1> {
    public int compareTo(class1 o) {
        //some code
    }
}

public class class2 implements Comparable<class2> {
    public int compareTo(class2 o) {
        //some code
    }
}

public class foo {
    private ArrayList<Class1> abc = new ArrayList<Class1>(); 
    private ArrayList<Class2> def = new ArrayList<Class2>();
}

В следующем o = abc or def

public int foo1 (ArrayList<Object> o) {
   o[0].compareTo(o[1]);
}

Этот код продолжает выводить мне эту ошибку:

The method compareTo(class1) is undefined for the type Object

Я понимаю, почему, но я не могу найти обходной путь, чтобы мне не пришлось дублировать код, что было бы необходимо, потому что у меня больше объектов ArrayList и гораздо более длинный код.

Надеюсь, у одного из вас есть идея.

ПРОБЛЕМА РЕШЕНА !!! Решение было:

public <T extends Comparable<T>> int foo1 (ArrayList<T> o) {
  return o.get(0).compareTo(o.get(1));
}

Питера Лоури

Ответы [ 4 ]

0 голосов
/ 09 февраля 2011

Вам нужно сделать метод общим:

public <T extends Comparable<? super T>> int foo1 (ArrayList<T> o) {
0 голосов
/ 09 февраля 2011

Когда вы используете объект его методами суперкласса, вы не можете предполагать, что доступны его методы подкласса.

0 голосов
/ 09 февраля 2011

попробуйте следующее, которое компилируется и работает для abc и def без предупреждения.

public <T extends Comparable<T>> int foo1 (ArrayList<T> o) {
    return o.get(0).compareTo(o.get(1));
}
0 голосов
/ 09 февраля 2011

implements Comparable<class1>

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

реализовать его как

public class class1 implements Comparable<class1> {

    public int compareTo(class1 o) {
       //some code
    }
}

public class class2 implements Comparable<class2> {

    public int compareTo(class2 o) {
       //some code
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...