如何引用另一个类的实例?

时间:2017-01-15 08:54:09

标签: java

抱歉这个愚蠢的问题,但我真的无法自己解决,也无法找到合适的解决方案。

我有多个课程:MusicCollection,专辑和歌曲。每个都是一个ArrayList和一堆通过GUI类存储新专辑的方法。现在我构建了一个带有LinkedList的anoter类播放列表,该列表应该能够从专辑中获取歌曲。

在GUI类中,我创建了一个MusicCollection实例来添加专辑和歌曲,并使用这些类的方法。

要将歌曲添加到播放列表,我在GUI类中创建了一个播放列表实例。此播放列表实例需要访问MusicCollection实例才能获取其歌曲。我怎么解决这个问题?我试图将MusicCollection的实例公开,没有用,我试图通过getter调用它,也没用。

如果我在PlayList类中创建一个新的MusicCollection实例,它当然是空的: - /

任何人都可以帮助我吗?

提前致谢!

2 个答案:

答案 0 :(得分:0)

通常,如果您需要从类ClassA构造对象并引用已存在的对象,则必须以这样的方式实现ClassA,以便可以传递这些对象作为ClassA的构造函数的参数。然后,您可以在构造函数中选择将这些对象保存为字段,或者选择立即使用它们并且不保存它们(如果稍后在ClassA中不需要它们)。

public class ClassA {
    public ClassA(OtherClass1 obj1, OtherClass2 obj2){
         // do what you want with obj1 and obj2
    }
}

创建ClassA对象时:

OtherClass1 obj1 = ...;
OtherClass2 obj2 = ...;
// ...
ClassA aObj = new ClassA(obj1, obj2);

在您的代码中,我看到您已经定义了一个字段,因此您知道每个Playlist对象都需要一个MusicCollection对象。问题是哪个MusicCollection - 对象?在您的描述中,您似乎必须在Playlist类之外创建一个。如果您希望每个PlayList - 对象必须基于现有的MusicCollection - 对象构建,则需要应用上述概念。 PlayList的构造函数将是:

public PlayList(MusicCollection collection){
    musicCollection = collection;
}

之后,可以通过PlayList字段访问在创建musicCollection对象期间给出的集合。因此,在创建新的PlayList对象时,您只需要使用所需的数据作为参数传递正确的集合。

// Create a MusicCollection 
MusicCollection musicCollection = new MusicCollection();

// do things with that collection ... (fill it up for eg.)

// Create the playlist that will use that collection
PlayList playlist = new PlayList(musicCollection);

编辑:我的代码中有一个重要的错误,我忘了指出:

public static void main(String[] args){
   private void addSongfromAlbum(){
       System.out.println("Please select a Song to add to the Playlist\n");
       String name = scanner.nextLine();
       playlist.addSongToPlaylist(name);
   }
}

您正在使用另一种方法创建方法addSongfromAlbummain方法。不允许在另一种方法中创建方法。

答案 1 :(得分:-1)

public Class Main{
   public static void main(String[] args){
       addSongfromAlbum();
   }

   private void addSongfromAlbum(){
        System.out.println("Please select a Song to add to the Playlist\n");
        String name = scanner.nextLine();
        playlist.addSongToPlaylist(name);
    }
}


public class MusicCollection {

    private ArrayList<Album> myCollection;       <--------has data I need

    public getMyCollection(){
           return myCollection;
    }
}

public class Playlist {

    private MusicCollection musicCollection;

    public void addSongToPlaylist(String name){
        Song existingSong = findSong(name);
        if(existingSong != null){
            playList.add(existingSong);
        }else{
            System.out.println("There is no Song: " + name + " in this collection.");
        }
    }

    private Song findSong(String name){
        for(int i = 0; i < musicCollection.getMyCollection().size(); i++){ <--- already tried to access it differently but nothing works. if I set myCollection public and call it directly it can't be found.
            Album checkedAlbum = musicCollection.getMyCollection().get(i); <---no matter what I try, wont access the data. It's either empty (even though a direct call from the Main class shows it got data), or when I try to access myCollection directly it can't be found, even if I make it public. directly
            for(int j = 0; j < checkedAlbum.getAlbum().size();j++){
                Song checkedSong = checkedAlbum.getAlbum().get(j);
                if(checkedSong.getName().equals(name)){
                    return checkedSong;
                }
            }
        }
        return null;
    }
}