我有多个课程:MusicCollection,专辑和歌曲。每个都是一个ArrayList和一堆通过GUI类存储新专辑的方法。现在我构建了一个带有LinkedList的anoter类播放列表,该列表应该能够从专辑中获取歌曲。
在GUI类中,我创建了一个MusicCollection实例来添加专辑和歌曲,并使用这些类的方法。
要将歌曲添加到播放列表,我在GUI类中创建了一个播放列表实例。此播放列表实例需要访问MusicCollection实例才能获取其歌曲。我怎么解决这个问题?我试图将MusicCollection的实例公开,没有用,我试图通过getter调用它,也没用。
如果我在PlayList类中创建一个新的MusicCollection实例,它当然是空的: - /
任何人都可以帮助我吗?
提前致谢!
答案 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);
}
}
您正在使用另一种方法创建方法addSongfromAlbum
:main
方法。不允许在另一种方法中创建方法。
答案 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;
}
}