Java:从主方法外部调用println
因此,我正在为我在学校的Java编程课创建一个非常基本的机场模拟器。每次调用fly()或land()方法时,我都需要在控制台上打印一条消息,我只是想知道最实用的方法。我会选择将其设置为void方法,因此每次从main方法调用它时,它都会直接从fly()打印。我隐约记得我的教授告诉我,这种方式是一种糟糕的做法,你不应该从外部方法打印到控制台。这是真的吗?让fly()和land()方法返回一个字符串,然后打印出来会更好吗Java:从主方法外部调用println,java,methods,println,Java,Methods,Println,因此,我正在为我在学校的Java编程课创建一个非常基本的机场模拟器。每次调用fly()或land()方法时,我都需要在控制台上打印一条消息,我只是想知道最实用的方法。我会选择将其设置为void方法,因此每次从main方法调用它时,它都会直接从fly()打印。我隐约记得我的教授告诉我,这种方式是一种糟糕的做法,你不应该从外部方法打印到控制台。这是真的吗?让fly()和land()方法返回一个字符串,然后打印出来会更好吗 public void fly() { System.out.prin
public void fly() {
System.out.println("Plane is flying.");
}
或
通常,直接从方法打印消息不是一个坏方法,但这取决于上下文。有时域逻辑(飞行)应该与日志记录分开(
System.out.println
)。如果您不想在fly
方法中直接打印消息,可以创建第二个方法来包装fly
方法并打印所需消息:
public void flyAndLog() {
fly();
System.out.println("Plane is flying.");
}
你的教授说得有道理;在实际开发中,我会利用日志框架来代替这里的
System.out.println
,但这可能不是他们所说的
这最终取决于你在做什么。如果要在调用fly
时显示值,则可以使用第一种方法。如果您计划使用调用fly
时返回的值,则可以使用第二种方法如果您只想打印消息,那么第二种方法没有任何价值。
如果看不到您的方法是如何相互混合的,就不可能进行全面调用。你必须选择对你的应用最有意义的方法和途径。你可以用一种复杂的方式来做(不得不写下这个答案哈哈哈)
从函数内部打印某些内容没有固有的错误做法。如果您需要在每次飞机飞行时打印输出,请在
fly
函数中添加println
。实际应用程序倾向于写入文件或打印日志。我将以此作为类比。也就是说,我认为没有理由只在方法main
中执行此类操作。但是,方法的名称应反映消息已打印的事实。在给定的情况下,可以创建一个方法public void printMessage(String s){System.out.println(s);}
,并从fly()
和land()中调用此方法
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);
}
}