getters/setters 必须在 Java 的 main 方法中吗?

Must getters/setters be in main method in Java?

最近,我在一门计算机科学课程中接到了一项作业,要创建一个 class,其中包含两个根据所述 class 构建的对象。

教授通过邮件提出的批评如下:"sysouts in constructor, getters, and setters these should be in the main method."

他的英语说得不太好,所以帮不上什么忙。有人知道他在参考我的代码时到底在说什么吗?这是我提交的代码:

public class Book {

int currentPage;
int nextPage;
int lastPage;

public Book(int pageNumber) {
    currentPage = pageNumber;
    System.out.println("You've opened the book to page " + currentPage + ".");
}

public void turnForward(int numTurned) {
    nextPage = numTurned + currentPage;
    System.out.println("You've turned forward to page " + nextPage + ".");
}

public void turnBack(int numTurned) {
    lastPage = nextPage - numTurned;
    if (lastPage <= 1) {
        lastPage = 1;
        System.out.println("You've turned back to the first page.");
    }else {
        System.out.println("You've turned back to page " + lastPage + ".");
    }
}

public static void main(String[] args) {

  Book bigJava = new Book(5);
  bigJava.turnForward(2);
  bigJava.turnBack(8);

  Book earlyObjects = new Book(22);
  earlyObjects.turnForward(12);
  earlyObjects.turnBack(17);
}

}

是否必须在main方法中放入getters/setters?如果我这样做,代码实际上并不 运行。

他指的是您 class 的可重用性。他希望您公开 getter,这样您就可以将打印语句放在 main 方法中。

为什么?

如果其他人想使用您的 class,或者您可能想将它重新用于其他项目,则不应将内容打印到控制台。并非所有可能使用 Book 的情况都应该将内容打印到控制台。

因此最好将日志记录保留在 main 方法中,这样 Book 可以重复用于其他任务。

Getters 允许您访问值,同时仍然保留您的字段 private,确保可以修改它们的唯一方法是通过您公开的行为:turnForwardturnBack, 等等..

改进您的代码

当您翻页时,当前页应该改变。保持不变是没有意义的。

您的行为方法应该改变 currentPage 变量:

public void turnForward(int pages) {
    currentPage += numOfPages;
}

public void turnBack(int numOfPages) {
    currentPage -= numOfPages;
}

public int getCurrentPage() {
    return currentPage;
}

然后您的主要方法可以翻页,并在每次翻页时进行记录:

public static void main(String[] args) {
    Book book = new Book(25);

    int startPage = book.getCurrentPage();
    book.turnForward(5);
    int endPage = book.getCurrentPage();

    System.out.println("The book was turned " + endPage - startPage + " pages forward.");
}