在对象中存储对象

时间:2011-12-06 21:13:25

标签: java object

自从我昨天发布关于从头开始构建链接列表的帖子以来,我已经取得了一些进展。

我遇到了一个新障碍:在对象中存储对象。

假设我有一个具有以下属性的“book”类(忘记了我熟悉的所有set& get方法):

 private String title;
 private int rating;

我如何引用另一个类,如“作者”,因为很明显一本书必须有一个作者,而且很多书可能有一个或多个作者。

这是我的'author'类属性(再次忽略gets& sets):

 String authorName;
 String authorEmail;

我是否正确地认为我需要在“书籍”课程中启动“作者”的对象:

 private String title;
 private int rating; //mine
 private Author author = new Author();

每次创建“book”的新实例时,我是否必须设置authorName和authorEmail属性?

非常感谢您提出建设性的反馈意见。

4 个答案:

答案 0 :(得分:1)

您不一定需要在声明属性的位置实例化Author对象。我建议将已经实例化的作者传递给Book类的构造函数或者设置器。然后,您可以将同一个作者传递到您创建的应与其关联的每本书中。

编辑:添加了一些代码段:

例如,如果你使你的Book构造函数像这样:

public Book(String title, int rating, Author author) {
    // set this.title, this.rating, and this.author to the passed-in parameters...
}

然后你会在这样的代码中调用它:

Author bob = new Author(); 
// You can set the name and email of the Author here using setters,
//   or add them as args in the Author constructor
Book firstBook = new Book("The First Book", 1, bob);
Book secondBook = new Book("The Second Book", 2, bob);

答案 1 :(得分:0)

这是一对多关系。您需要您的作者类只是一个人和一本书之间的链接。事情会好转。

答案 2 :(得分:0)

您可能需要某种单身作者列表,以防止同一作者的许多副本。要么是这样,要么你肯定需要覆盖作者的equals方法。

如果您使用单例,您可以在AuthorList对象中创建一个getAuthor例程,如果该作者不存在则该例程或者提取已创建的作者。

答案 3 :(得分:0)

你走在正确的轨道上。您可以使用ArrayList来动态添加新作者,而无需调整任何大小。让我为你澄清一下:

class Book {
    private String title;
    private int rating;
    private List<Author>authors = new ArrayList<Author>();


    public Book(String title, int rating, Author author) {
        this.title = title;
        this.rating = rating;
        authors.add(author);
    }

    public Book(String title, int rating, Author author) {
        this.title = title;
        this.rating = rating;
        this.author = author;
    }

    public void addAuthor(Author a) {
        authors.add(a);
    }

    public int numberOfAuthors() {return authors.size();}
}
class Author {
    private String name;
    private String email;

    public Author(String name, String email) {
        //...Same thing
    }
}
class Main {
    public static void main(String[] args) {
        Book book = new Book("Java Programming", 5, new Author("Me", "me@gmail.com"));
        Author contributingAuthor = new Author("My Friend", "cupcakes@gmail.com");
        book.addAuthor(contributingAuthor);
    }
}