2015-06-10 3 views
1

Эта вещь просто не компилируется. Я не знаю, что я делаю неправильно. Компилятор лает на Collections.sort (users);. См. Сообщение об ошибке ниже справа после перечисления программы. Было бы очень признательно, если бы вы могли дать какое-либо представление о том, что действительно не так с этим фрагментом кода.Не найдено подходящих методов сортировки (Список <User>)

Вот вывод из команды Java -версии:

java version "1.8.0_25" 
Java(TM) SE Runtime Environment (build 1.8.0_25-b18) 
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode) 

.

import java.util.ArrayList; 
import java.util.List; 
import java.util.Collections; 

class MyApp { 
    public static void main(String[] args) { 

     List<User> users = new ArrayList<>(); 

     users.add(new User("John Doe")); 
     users.add(new User("Bob Smith")); 
     users.add(new User("Jane Doe")); 
     users.add(new User("Bill Gates")); 

     Collections.sort(users); 

     for (User user : users) 
      System.out.println(user.name); 
    } 
} 

class User implements Comparable<User> { 
    public String name; 
    User(String name) { this.name = name; } 
    @Override public int compareTo(User user) { 
     return this.name.compareTo(user.name); 
    } 
} 

Вот уродливые сообщение об ошибке, что я получаю:

MyApp.java:15: error: no suitable method found for sort(List<User>) 
      Collections.sort(users); 
       ^
    method Collections.<T#1>sort(List<T#1>) is not applicable 
     (inference variable T#1 has incompatible bounds 
     equality constraints: User 
     upper bounds: Comparable<? super T#1>) 
    method Collections.<T#2>sort(List<T#2>,Comparator<? super T#2>) is  not appli 
cable 
     (cannot infer type-variable(s) T#2 
     (actual and formal argument lists differ in length)) 
    where T#1,T#2 are type-variables: 
    T#1 extends Comparable<? super T#1> declared in method  <T#1>sort(List<T#1>) 
T#2 extends Object declared in method <T#2>sort(List<T#2>,Comparator<?  super 
T#2>) 
1 error 
+2

Какую версию Java вы пользуетесь? – Jens

+0

java version "1.8.0_25" Java (TM) SE Runtime Environment (build 1.8.0_25-b18) 64-разрядная виртуальная машина Java HotSpot TM (сборка 25.25-b02, смешанный режим) –

+1

Поскольку вы импортируете ArrayList, List и Collections *, но не * Сравнительно, и поскольку я видел это раньше: вы определили свой собственный интерфейс под названием Comparable? –

ответ

0

Ваш код компилируется нормально с JDK 1.7.0.60, 1.7.0.80, 1.8.0.25 и 1.8.0.40. Вероятно, у вас есть ранний 1.8.0.x javac, у которого было много проблем с дженериками. Попробуйте обновить его до последней версии.

+0

java version "1.8.0_25" Java (TM) SE Runtime Environment (build 1.8.0_25-b18) 64-разрядная виртуальная машина Java HotSpot TM (сборка 25.25-b02, смешанный режим) –

+0

Ну, когда я скачал и установил мой Java-компилятор, который был около 5 или 6 месяцев назад, это была последняя версия в то время. Итак, я не думаю, что мой компилятор такой старый. Насколько я знаю, функция дженериков была намного длиннее. –

0

Если ваш компилятор жалуется на это попытаться дать подсказку о типе:

Collections.<User>sort(users); 
+0

ошибка: метод сортировка в классе Коллекции нельзя применять для получения n типов; Коллекции. сортировать (пользователей); ^ требуется: Список найден: Список Причина: явный аргумент типа пользователь не соответствует заявленной связанной (ов) Comp пашни где T - переменная типа: T extends Сопоставимый , объявленный в методе sort (Список ) Примечание: некоторые сообщения были упрощены; перекомпилировать с -Xdiags: verbose для получения полный вывод 1 ошибка –

Смежные вопросы