【问题标题】:no suitable method found for Collections.sort(List )没有找到适合 Collections.sort(List) 的方法
【发布时间】:2017-04-25 23:25:36
【问题描述】:

目前我正在学习 Java。

java.utils.Collections 有问题,NetBeans 不断给我这个错误。

 no suitable method found for sort(List<MovieSession>)
    method Collections.<T#1>sort(List<T#1>) is not applicable
      (inference variable T#1 has incompatible bounds
        equality constraints: MovieSession
        upper bounds: Comparable<? super T#1>)
    method Collections.<T#2>sort(List<T#2>,Comparator<? super T#2>) is not applicable
      (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>

我有以下课程 MovieSession

public class MovieSession implements Comparable<MovieSession> {
    @Override
    public int compareTo(MovieSession currentMovieSession) { 

    }
}

主要方法

public static void main(String[] args) {

   List<MovieSession> movieSessions = new ArrayList<MovieSession>();

   MovieSession cinema1 = new MovieSession("XYZ", 'R', new Time(10, 10, 10));
   MovieSession cinema2 = new MovieSession("ABC", 'G', new Time(11, 00, 00));

   movieSessions.add(cinema1);
   movieSessions.add(cinema2);
   Collections.sort(movieSessions);
   System.out.print(movieSessions);    
}

不确定这里出了什么问题。

【问题讨论】:

  • 你为什么到处使用原始类型?
  • 哦,等等,它们看起来很原始,因为您没有正确编码格式。
  • 感谢编辑,它总是发生在我身上
  • @WonderGal 所以底部的语句不在方法内?

标签: java collections


【解决方案1】:

我复制了你的代码,添加了缺失的位,它运行没有任何错误

主要:

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

public class TestBed {

public static void main(String[] args) {
       List<MovieSession> movieSessions = new ArrayList<MovieSession>();

        MovieSession session1 = new MovieSession("Logan", 'R', new Time(10, 10, 10));
        MovieSession session2 = new MovieSession("Baby Boss", 'G', new Time(11, 00, 00));
        MovieSession session3 = new MovieSession("Guardians Of The Galaxy ", 'M', new Time(9, 30, 00));
        MovieSession session4 = new MovieSession("Moana", 'G', new Time(13, 45, 00));


        movieSessions.add(session1);
        movieSessions.add(session2);
        movieSessions.add(session3);
        movieSessions.add(session4);

        Collections.sort(movieSessions);
        System.out.println(movieSessions);
    }

}

电影会话:

import java.sql.Time;

public class MovieSession implements Comparable<MovieSession> {

    private Time sessionTime;
    private String movieName;
    private char rating;

    public MovieSession(String mn, char rtg, Time tm){
        this.sessionTime = tm;
        this.movieName = mn;
        this.rating = rtg;
    }

    @Override
    public int compareTo(MovieSession currentMovieSession) {
        if (getSessionTime().compareTo(currentMovieSession.getSessionTime()) > 0) {
            return 1;
        } else if (getSessionTime().compareTo(currentMovieSession.getSessionTime()) < 0) {
            return -1;
        } else if (getSessionTime().compareTo(currentMovieSession.getSessionTime()) == 0) {
            if (getMovieName().compareTo(currentMovieSession.getMovieName()) > 0) {
                return 1;
            } else if (getMovieName().compareTo(currentMovieSession.getMovieName()) < 0) {
                return -1;
            }
        }
        return 0;
    }

    public String toString(){
        return String.format("%s - %s - %s", movieName, rating, sessionTime);
    }


    public Time getSessionTime() {
        return sessionTime;
    }


    public void setSessionTime(Time sessionTime) {
        this.sessionTime = sessionTime;
    }


    public String getMovieName() {
        return movieName;
    }


    public void setMovieName(String movieName) {
        this.movieName = movieName;
    }

}

输出: [银河护卫队 - M - 09:30:00,Logan - R - 10:10:10,Baby Boss - G - 11:00:00,Moana - G - 13:45:00]

【讨论】:

  • 非常感谢@DevonSutherland 的帮助。但我仍然有同样的错误。是不是因为我的 main 方法在 MovieSession 里面?
  • 所以我继续尝试,但我仍然无法重现您的错误,抱歉。你能发布你的进口和实际的例外吗?
  • 为什么不return getMovieName().compareTo(currentMovieSession.getMovieName()); 进行二次比较?
  • @DevonSutherland 我已经用错误更新了我的问题。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-30
  • 2014-08-27
  • 2021-06-19
  • 2015-11-26
相关资源
最近更新 更多