簡體   English   中英

Java:從外部Main方法調用println

[英]Java: Calling println From Outside Main Method

因此,我正在為學校的Java編程課程創建一個非常基本的機場模擬器。 每次我調用fly()或land()方法時,我都需要向控制台打印一條消息,並且對執行此操作的最實用方法感到好奇。 我會選擇將其設為void方法,因此每次從main方法調用它時,它只會從fly()直接打印出來。 我隱約記得我的教授告訴我,這種方式是一種不好的做法,您不應該從外部方法打印到控制台。 這是真的? 使fly()和land()方法返回一個String然后將其打印出來會更好嗎?

public void fly() {
    System.out.println("Plane is flying.");
}

要么

public String fly() {
    return "Plane is flying.";
}

你的教授有道理; 在實際開發中,我將利用日志記錄框架代替System.out.println ,但這可能不是他們在談論的。。。

最終,這取決於您在做什么。 如果要在調用fly顯示一個值,則可以使用第一種方法。 如果計划使用在調用fly時返回的值,則可以使用第二種方法。 有在第二種方法沒有價值,如果所有想要做的是打印的消息。

沒有看到您的方法如何相互融合,就不可能進行總括式調用。 您必須選擇最適合您的應用程序的方法。

通常,直接從方法中打印消息並不是一個壞方法,但這取決於上下文。 有時,域邏輯(運行中)應與日志記錄( System.out.println )分開。 如果您不想直接在fly方法中打印消息,則可以創建第二個方法,該方法包裝fly方法並打印所需的消息:

public void flyAndLog() {
    fly();
    System.out.println("Plane is flying.");
}

您可以用一種復雜的方式來做(必須寫出這個答案哈哈哈)

public interface Status {
   Status next();
   Status previous(); 
   String representation();
}

public class PlaneLanding implements Status {
    private final Status previous;

    public PlaneLanding(Status previous) {
        this.previous = previous;
    }

    @Override
    public String representation() {
        return "Plane is landing";
    }

    @Override
    public Status next() {
        return null;
    }

    @Override
    public Status previous() {
        return previous;
    }
}

public class PlaneFlying implements Status {
    private final Status previous;

    public PlaneFlying(final Status previous) {
        this.previous = previous;
    }

    @Override
    public String representation() {
        return "Plane is flying";
    }

    @Override
    public Status next() {
        return new PlaneLanding(this);
    }

    @Override
    public Status previous() {
        return previous;
    }
}

class PlaneSimlulator {
   public static void main(final String... args) {
      Status planeStatus = new PlaneTakingOff();

      do {
         System.out.println(planeStatus.representation());
         planeStatus = planeStatus.next();
      } while (planeStatus != null);
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM