Java 爪哇语;无法将compare解析为类型;错误

Java 爪哇语;无法将compare解析为类型;错误,java,arrays,binary,comparator,Java,Arrays,Binary,Comparator,我在试图使用比较器对数组进行二进制搜索时遇到了一个奇怪的错误。该错误表示“compareArtist无法解析为类型”,并且由Eclipse在以下代码中引发: Comparator<Song> compare = new Song.compareArtist(); Comparator<Song> compare = new Song.compareArtist(); Comparator compare=新歌。compareArtist(); 我已经做了一些搜索,找

我在试图使用比较器对数组进行二进制搜索时遇到了一个奇怪的错误。该错误表示“compareArtist无法解析为类型”,并且由Eclipse在以下代码中引发:

Comparator<Song> compare = new Song.compareArtist();
Comparator<Song> compare = new Song.compareArtist();
Comparator compare=新歌。compareArtist();
我已经做了一些搜索,找到了Eclipse中可能存在的错误的引用,尽管我在另一台计算机上尝试了该代码,但错误仍然存在

我还发现了类似的关于比较法资本化的问题,在这个例子中是compareArtist。我见过一些例子,其中方法名称中的第一个单词是大写的,尽管我的理解是,方法名称传统上是以小写字母开头的。我尝试过改变资本化,但什么都没有改变

如果类没有导入正确的包,我还发现了对这个错误的引用。我在这两个类中都导入了java.util,据我所知,这允许使用比较器

我已经尝试过在具有二进制搜索调用的类中以及在“Song”类中编写compareArtist方法,根据我的家庭作业,它应该在哪里。我已经相应地更改了构造函数,问题仍然存在

最后,我试图通过在Song类中实现Comparator并创建自己的名为“compare”的方法来覆盖Comparator compare方法。这将返回相同的错误。在找到了几个相同的示例之后,我才开始调用comparator方法,而不是“compare”

下面是调用使用比较器的二进制搜索的类的相关代码。此代码还具有compareArtist方法的本地版本。虽然当前没有调用它,但该方法的代码与Song类中的代码相同,我试图从Song类中调用它

谢谢你的建议和见解

import java.io.*;
import java.util.*;

public class SearchByArtistPrefix {

    private Song[] songs;  // keep a direct reference to the song array
    private Song[] searchResults;  // holds the results of the search
    private ArrayList<Song> searchList = new ArrayList<Song>();  // hold results of       search while being populated. Converted to searchResults array.

    public SearchByArtistPrefix(SongCollection sc) {
        songs = sc.getAllSongs();
    }

   public int compareArtist (Song firstSong, Song secondSong) {
      return firstSong.getArtist().compareTo(secondSong.getArtist());
   }

    public Song[] search(String artistPrefix) {

       String artistInput = artistPrefix;
      int searchLength = artistInput.length();

      Song searchSong = new Song(artistInput, "", "");
      Comparator<Song> compare = new Song.compareArtist();
      int search = Arrays.binarySearch(songs, searchSong, compare);
import java.io.*;
导入java.util.*;
公共类SearchByArtistPrefix{
私有歌曲[]歌曲;//保留对歌曲数组的直接引用
私有歌曲[]searchResults;//保存搜索结果
private ArrayList searchList=new ArrayList();//填充时保留搜索结果。转换为searchResults数组。
公共搜索由ArtistPrefix(SongCollection sc){
歌曲=sc.getAllSongs();
}
公共国际比较师(首歌首歌,首歌第二首歌){
返回firstSong.getArtist().compareTo(secondSong.getArtist());
}
公共歌曲[]搜索(字符串artistPrefix){
字符串artistInput=artistPrefix;
int searchLength=artistInput.length();
歌曲搜索歌曲=新歌(artistInput,“,”);
Comparator compare=新歌。compareArtist();
int search=Arrays.binarySearch(歌曲、搜索歌曲、比较);
歌曲类代码:

import java.io.FileNotFoundException;
import java.util.*;

public class Song implements Comparable<Song> {

   private String artist, title, lyrics;
   private static int compareCounter = 0;

   public Song(String artistName, String songTitle, String songLyrics) {
      this.artist = artistName;
      this.title = songTitle;
      this.lyrics = songLyrics;
   }
   public String getArtist() {
      return artist;
   }

   public void setArtist(String artist) {
      this.artist = artist;
   }

   public String getTitle() {
      return title;
   }

   public void setTitle(String title) {
      this.title = title;
   }

   public String getLyrics() {
      return lyrics;
   }

   public void setLyrics(String lyrics) {
      this.lyrics = lyrics;
   }  

   public static int getCounter() {
      return compareCounter;
   }

   public static void setCounter(int compareCounter) {
      Song.compareCounter = compareCounter;
   }

   public int compareTo(Song secondSong) {

      String secondArtist = secondSong.getArtist();
      String secondTitle = secondSong.getTitle();

      compareCounter++;

      if (!this.artist.equals(secondArtist)) {
         return this.artist.compareToIgnoreCase(secondArtist);
      } else {
         return this.title.compareToIgnoreCase(secondTitle);
      }
   }

   public int compareArtist (Song firstSong, Song secondSong) {
      return firstSong.getArtist().compareTo(secondSong.getArtist());
   }
import java.io.FileNotFoundException;
导入java.util.*;
公共类歌曲{
私人弦乐艺术家、标题、歌词;
私有静态int compareCounter=0;
公共歌曲(弦乐艺人姓名、弦乐歌曲名称、弦乐歌词){
this.artist=艺人姓名;
this.title=歌曲标题;
歌词=歌词;
}
公共字符串getArtist(){
回归艺术家;
}
公共虚空设置艺术家(弦乐艺术家){
这个艺术家=艺术家;
}
公共字符串getTitle(){
返回标题;
}
公共无效集合标题(字符串标题){
this.title=标题;
}
公共字符串getLyps(){
返回歌词;
}
公共歌词(字符串歌词){
歌词=歌词;
}  
公共静态int getCounter(){
返回比较计数器;
}
公共静态无效设置计数器(int compareCounter){
Song.compareCounter=比较计数器;
}
公共int比较(歌曲第二首歌曲){
字符串secondArtist=secondSong.getArtist();
字符串secondTitle=secondSong.getTitle();
compareCounter++;
如果(!this.artist.equals(secondArtist)){
返回此.artist.compareTignoreCase(第二个artist);
}否则{
返回此.title.compareTignoreCase(第二个title);
}
}
公共国际比较师(首歌首歌,首歌第二首歌){
返回firstSong.getArtist().compareTo(secondSong.getArtist());
}
类的末尾还有一个main()方法,但它只提供内部测试代码,与当前问题无关。

在此代码中:

Comparator<Song> compare = new Song.compareArtist();
Comparator<Song> compare = new Song.compareArtist();
在此代码中:

Comparator<Song> compare = new Song.compareArtist();
Comparator<Song> compare = new Song.compareArtist();
你的声明:

Comparator<Song> compare = new Song.compareArtist();
你的声明:

Comparator<Song> compare = new Song.compareArtist();

谢谢,这很有效。我没有意识到我必须在类歌曲中创建一个子类,以便比较器工作。现在我只需要弄清楚如何从主类传入getter…奇怪。它工作了一会儿。错误消失了,然后Eclipse决定不再喜欢它。我很确定,在它工作之后,您改变了一些东西请将错误消息放在这里,看看我是否能找到错误。错误消息是相同的。“无法解析为类型”。唯一的区别是我使用了:public static class CompareArtist implements{,因为当我使用:public static class CompareArtist implements时{我在隐藏类型时出错。我非常感谢你的帮助。谢谢。谢谢,这很有效。我没有意识到我必须在类歌曲中创建一个子类才能让比较器工作。现在我只需要找出如何从主类传入getter…奇怪。它工作了一会儿。错误消失了,然后Eclipse决定不这样做o再次喜欢它。我很确定,在它工作后,您更改了其他内容,但可能不是以正确的方式。请将错误消息放在这里,看看我是否能找到错误。错误消息是相同的。“无法解析为类型”。唯一的区别是我使用了:public static class CompareArtist I