繁体   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