(JAVA) Получить доступ ко всем объектам через ссылку другого объекта

Есть следующий код:

// Класс для создания сущностей Track.
final class Track {
    String Name;        // название трека
    String Author;      // имя автора
    String CoAuthor;    // имя соавтора
    Album A;            // альбом
    
    // Конструктор класса для создания сущности с указанием названия трека и альбома.
    Track(String n, Album a) {
        Name = n;
        Author = a.Author;
        A = a;
    }
    
    // Конструктор класса для создания сущности с указанием названия трека, его автора и альбома.
    Track(String name, String coAuthor, Album a) {
        Name = name;
        Author = a.Author;
        CoAuthor = coAuthor;
        A = a;
    }
    
    public String toString() { 
        if (CoAuthor != null) {
            return Name + ", " + "авторы: " + Author + ", "+ CoAuthor;
        }
        
        return Name + ", " + "автор: " + Author;
    }
}
// Класс для создания сущностей Album.
class Album {
    String Name;    // название альбома
    String Author;  // автор альбома
    
    Album (String n, String a) {
        Name = n;
        Author = a;
    }
}

public class Program {

    public static void main(String[] args) {
        Album a1 = new Album ("Кукловод", "Металлов");
        Album a2 = new Album ("Шоссе к ООП", "Асид");
        
        Track t1 = new Track ("Состояние объектов", "Янг", a2);
        Track t2 = new Track ("Шоссе к ООП", a2);
        Track t3 = new Track ("Одноразовый программист", "Бертон", a1);
        
        System.out.println(t1);
        System.out.println(t2);
        System.out.println(t3);
        
        System.out.println(t1.A);
    }
}

Требуется вывести все треки альбома “Шоссе к ООП” (сущность a2), имея ссылку на трек “Состояние объектов” (сущность t1).

Я правильно понимаю, что нужно получить доступ ко всем объектам класса Track, которые связаны с объектом класса Album? Если да, то прошу просто скинуть пример правильного кода. Если же неправильно понял, то дополнительно прошу объяснить, как сделать правильно.


Ответы (1 шт):

Автор решения: Дмитрий

Примерно так:

public class Program {

    public static void main(String[] args) {
        
        Album album1 = new Album ("Кукловод", "Металлов");
        Track track = new Track ("Одноразовый программист", "Бертон");
        album1.addTrack(track);
        
        Album album2 = new Album ("Шоссе к ООП", "Асид");
        Track track1 = new Track ("Состояние объектов", "Янг");
        Track track2 = new Track ("Шоссе к ООП");
        album2.addTrack(track1);
        album2.addTrack(track2);
        
        System.out.println(track1.getAlbum().getTracks());
                
    }
}

import java.util.ArrayList;
import java.util.List;

public class Album {
    
    private String name;
    private String author;
    private List<Track> tracks = new ArrayList<>();
    
    public Album (String name, String author) {
        this.name = name;
        this.author = author;
    }
    
    public Album addTrack(Track track) {
        tracks.add(track);
        track.setAlbum(this);
        return this;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public List<Track> getTracks() {
        return tracks;
    }

    public void setTracks(List<Track> tracks) {
        this.tracks = tracks;
    }

    @Override
    public String toString() {
        return "Album{" + "name=" + name + ", author=" + author + '}';
    }
    
}

public class Track {

    private String name;
    private String author;
    private String coAuthor;
    private Album album;

    public Track(String name) {
        this.name = name;
    }
    
    public Track(String name, String author) {
        this.name = name;
        this.author = author;
    }

    public Track(String name, String author, String coAuthor) {
        this.name = name;
        this.author = author;
        this.coAuthor = coAuthor;
    }
    
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getCoAuthor() {
        return coAuthor;
    }

    public void setCoAuthor(String coAuthor) {
        this.coAuthor = coAuthor;
    }

    public Album getAlbum() {
        return album;
    }

    public void setAlbum(Album album) {
        this.album = album;
    }

    @Override
    public String toString() {
        return "Track{" + "name=" + name + ", author=" + author + ", coAuthor=" + coAuthor + '}';
    }
    
}
→ Ссылка