在Java中如何通过对象的构造函数将对象添加到数组?

stu*_*176 3 java arrays constructor

我是一个相当新手的Java开发人员.我有一个用于表示书籍的Book类,以及一个用于表示库的Library类.

Library类中的一些代码:

/**
 * method to populate books list
 */
public static void populateBooksList() {

    // instantiate books

    Book b1 = new Book("Catch 22", "Heller", "Thriller", 5, 1, false);
    Book b2 = new Book("The Hobbit", "Tolkien", "Fantasy", 4, 2, false);
    Book b3 = new Book("Gullivers Travels", "Swift", "Adventure", 3, 3,
            false);
    Book b4 = new Book("Moby Dick", "Melville", "Crime", 4, 4, false);
    Book b5 = new Book("The Lord of the Rings", "Tolkien", "Fantasy", 4, 5,
            false);

    // populate the array

    books[0] = b1;
    books[1] = b2;
    books[2] = b3;
    books[3] = b4;
    books[4] = b5;

}
Run Code Online (Sandbox Code Playgroud)

Book类中的一些代码(我没有粘贴所有的gets/sets):

public class Book {

    /**
     * declaring var for genre
     */
    private String genre;

    /**
     * declaring var for rating
     */
    private int rating;

    /**
     * declaring var for name
     */
    private String name;

    /**
     * declaring var for ID
     */
    private int iD;

    /**
     * declaring var for author
     */
    private String author;

    /**
     * declaring var for onLoan
     */
    private Boolean onLoan;

    /**
     * default constructor
     */
    public Book() {

    }

    /**
     * constructor with args
     * 
     * @param nameP
     *            - book name
     * @param authorP
     *            - book author
     * @param genreP
     *            - book genre
     * @param ratingP
     *            - book rating
     * @param iDP
     *            - book ID
     * @param onLoanP
     *            - onLoan
     */
    public Book(String nameP, String authorP, String genreP, int ratingP,
            int iDP, Boolean onLoanP) {
        this.name = nameP;
        this.iD = iDP;
        this.author = authorP;
        this.onLoan = onLoanP;
        this.genre = genreP;
        this.rating = ratingP;
    }
Run Code Online (Sandbox Code Playgroud)

我想要做的是更有效地将书籍添加到阵列.如果我有50本书,我需要50行代码来填充数组.我想使用Book类中的构造函数,或者以某种方式使用Book类中的gets/sets,或者使用Book类中包含的代码,以便在实例化时自动将每个对象添加到数组中.这可能吗?

谢谢

S.

Gro*_*ogi 5

您正在询问有关编程的一般概念,而不是Java本身.

简而言之 - 构造函数的唯一责任是创建和初始化一个对象.在构造函数中执行任何其他操作都是不好的做法.

您可以使用工厂模式:

public class BookCollection {
    public static final int MAX_COUNT = 20;

    private int count = 0;
    private Book[] books = new Book[MAX_COUNT];

    public Book createBook(String nameP, String authorP, String genreP, int ratingP, int iDP, Boolean onLoanP) {
        books[count] = new Book(nameP, authorP, genreP, ratingP, iDP, onLoanP);

        return books[count++];
    }

    public Book[] getBooks() {
         return books;
    }
}
Run Code Online (Sandbox Code Playgroud)

这个实现对于许多问题是开放的 - 例如创建了太多书籍,并发访问问题和许多其他问题.

但是应该给你一个指导,去哪里.

我个人宁愿选择一个集合,比如ArrayList.不是数组.在某些情况下,数组很棒,但大多数情况下ArrayList会好得多.

public class BookCollection {
    private List<Book> books = new ArrayList<Book>();

    public Book createBook(String nameP, String authorP, String genreP, int ratingP, int iDP, Boolean onLoanP) {
        Book result = new Book(nameP, authorP, genreP, ratingP, iDP, onLoanP)

        books.add(result);

        return result;
    }

    public List<Books> getBooks() {
         return Collections.unmodifiableList(books);
    }
}
Run Code Online (Sandbox Code Playgroud)