自从我昨天发布关于从头开始构建链接列表的帖子以来,我已经取得了一些进展。
我遇到了一个新障碍:在对象中存储对象。
假设我有一个具有以下属性的“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属性?
非常感谢您提出建设性的反馈意见。
答案 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);
}
}