【问题标题】:Must getters/setters be in main method in Java?getter/setter 必须在 Java 的 main 方法中吗?
【发布时间】:2017-02-14 21:36:40
【问题描述】:

最近我有一个计算机科学课程的作业,要创建一个类,其中包含从该类构建的两个对象。

教授通过电子邮件批评如下:“构造函数、getter 和 setter 中的 sysouts 应该在 main 方法中。”

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

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);
}

}

是否必须将 getter/setter 放在 main 方法中?如果我这样做,代码实际上不会运行。

【问题讨论】:

  • 再读一遍。他说系统输出不应该在构造函数、getter 或 setter 中,而是在 main 方法中。它并没有说您应该将 getter 和 setter 放在 main 方法中。
  • 你的教授希望你在类的 main 方法中拥有所有的打印语句;不在 setter/getter/constructors 中

标签: java main setter getter-setter getter


【解决方案1】:

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

为什么?

如果其他人想使用您的类,或者您想将它重用于不同的项目,则不应将内容打印到控制台。并非所有可能使用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;
}

然后您的 main 方法可以翻页,每次都进行记录:

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.");
}

【讨论】:

    猜你喜欢
    • 2016-08-04
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    • 2019-12-30
    • 2015-02-07
    • 2011-04-14
    • 2017-09-09
    • 1970-01-01
    相关资源
    最近更新 更多