Java 具有较大大小但所有空值的对象列表

Java 具有较大大小但所有空值的对象列表,java,serialization,null,Java,Serialization,Null,我正在遍历字符串(路径)列表,并使用文件(“路径”)打开这些文件(mp3)。然后,我获取元数据并在对象(歌曲)中设置该元数据的值。然后我将这首歌添加到一个列表中,并将其传递到一个序列化文件中 我的问题是,当我填充我的歌曲列表以发送并写入时,在调试中,它的大小为49K个对象,并且所有对象都为空。但是每个对象都有我设置的值。如果我尝试调整大小,我会得到一个空指针异常 以下是相关代码: Song类(相当标准…唯一关心的是可序列化的实现): 调用以填充歌曲和歌曲列表并传递要写入的列表: public s

我正在遍历字符串(路径)列表,并使用文件(“路径”)打开这些文件(mp3)。然后,我获取元数据并在对象(歌曲)中设置该元数据的值。然后我将这首歌添加到一个列表中,并将其传递到一个序列化文件中

我的问题是,当我填充我的歌曲列表以发送并写入时,在调试中,它的大小为49K个对象,并且所有对象都为空。但是每个对象都有我设置的值。如果我尝试调整大小,我会得到一个空指针异常

以下是相关代码:

Song类(相当标准…唯一关心的是可序列化的实现):

调用以填充歌曲和歌曲列表并传递要写入的列表:

public static void savePopulatedList(){
        List<Song> myList = populateFromFile();
        SerialUtilities utilities = new SerialUtilities();
        utilities.saveSerializedSongInfoFile(myList);
    }

任何理解这一点的人,你能给我解释一下吗……最好是用fix:)。

这些项目不是
null
。调试器正在向您显示以下内容:

1 = {Song@669} "null"
index = {ClassName@ObjectId} "Result of 'toString()'"
由于您的
歌曲#toString
如下所示:

@Override
public String toString(){
    StringBuilder sb = new StringBuilder();
    sb.append("Values for this song:");
    sb.append("\n\tArtist: " + artistName);
    sb.append("\n\tTitle: " + songName);
    sb.append("\n\tRelease Date: " + releaseDate);
    sb.append("\n\tTrack Number: " + trackNumber);
    sb.append("\n\tComposer: " + composer);
    sb.append("\n\tPublisher: " + publisher);
    sb.append("\n\tLength: " + length);
    sb.append("\n");
    System.out.println(sb.toString());
    return null;
}
很清楚为什么它显示“null”
toString
应该返回对象的字符串表示形式。您的实现只是打印这个表示,然后返回
null
。您需要返回
sb.toString()


Song#toString
正在返回
null
?要展开@MadProgrammer comment,值不是null,您只需打印(为什么?)构建的字符串,然后返回null。数组值都显示为
Song@669
不同的数字意味着您在数组中分配了不同的对象。显示
宋的实现。toString
@Dima它已经在那里了…我明白了。嗯,它返回
null
。您希望打印出什么内容???谢谢。我之前一直在使用Override toString()进行一些测试。我知道这会把事情搞得一团糟。
public void saveSerializedSongInfoFile (List<Song> sl) {
//        List<Song> sortedSongList = SortSongList.sortSongBy(sl, SongComparator.Order.ARTIST);
        System.out.println("Size of Song List To Be Written: " + s1.size() + "\n");
        try (ObjectOutputStream objectOutputStream =
                     new ObjectOutputStream(new FileOutputStream(savePath))) {
            objectOutputStream.writeObject(sl);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
songs = {ArrayList@511}  size = 49783
listOfSongs = {ArrayList@512}  size = 49782
 0 = {Song@515} "null"
  path = "m:\tunes\10,000 Maniacs\In My Tribe\01 - What's The Matter Here_.mp3"
  songName = "What's The Matter Here?"
  artistName = "10,000 Maniacs"
  albumName = "In My Tribe"
  releaseDate = "1987"
  trackNumber = "1"
  composer = "Natalie Merchant/Robert Buck"
  genre = "Soft Rock"
  length = "4:51"
  publisher = "Elektra"
  artistID = 1
  albumID = 1
 1 = {Song@669} "null"
 2 = {Song@670} "null"
 3 = {Song@671} "null"
 4 = {Song@672} "null"
 5 = {Song@673} "null"
 6 = {Song@674} "null"
 7 = {Song@675} "null"
 8 = {Song@676} "null"
 9 = {Song@677} "null"
 10 = {Song@678} "null"
 11 = {Song@679} "null"
 12 = {Song@680} "null"
 13 = {Song@681} "null"
 14 = {Song@682} "null"
 15 = {Song@683} "null"
 16 = {Song@684} "null"
 17 = {Song@685} "null"
 18 = {Song@686} "null"
 19 = {Song@687} "null"
 20 = {Song@688} "null"
 21 = {Song@689} "null"
 22 = {Song@690} "null"
 23 = {Song@691} "null"
 24 = {Song@692} "null"
 25 = {Song@693} "null"
 26 = {Song@694} "null"
  path = "m:\tunes\AC-DC\1 Studio albums\1974 High Voltage (Australian Editions) @320\02 - She's Got Balls.mp3"
  songName = "She's Got Balls"
  artistName = "AC/DC"
  albumName = "High Voltage"
  releaseDate = "1975"
  trackNumber = "2"
  composer = null
  genre = "Hard Rock"
  length = "4:48"
  publisher = "Albert Productions"
  artistID = 1
  albumID = 1
 27 = {Song@695} "null"
 28 = {Song@696} "null"
 29 = {Song@697} "null"
 30 = {Song@698} "null"
 31 = {Song@699} "null"

 .......and this continues for the rest of the array.
1 = {Song@669} "null"
index = {ClassName@ObjectId} "Result of 'toString()'"
@Override
public String toString(){
    StringBuilder sb = new StringBuilder();
    sb.append("Values for this song:");
    sb.append("\n\tArtist: " + artistName);
    sb.append("\n\tTitle: " + songName);
    sb.append("\n\tRelease Date: " + releaseDate);
    sb.append("\n\tTrack Number: " + trackNumber);
    sb.append("\n\tComposer: " + composer);
    sb.append("\n\tPublisher: " + publisher);
    sb.append("\n\tLength: " + length);
    sb.append("\n");
    System.out.println(sb.toString());
    return null;
}
@Override
public String toString(){
    //...
    return sb.toString();
}