所以我正在学校为我的Java编程课程创建一个非常基本的机场模拟器。我每次调用方法fly()或land()时都需要向控制台打印一条消息,并且只是对最实用的方法感到好奇。我会选择使它成为一个void方法,因此每次从main方法调用它时,它只是从fly()打印。我依旧记得我的教授告诉我,这种做法是不好的做法,你不应该用外部方法打印到控制台。这是真的?使fly()和land()方法返回一个String然后将其打印出来会更好吗?
public void fly() {
System.out.println("Plane is flying.");
}
OR
public String fly() {
return "Plane is flying.";
}
答案 0 :(得分:1)
你的教授有一个观点;在实际开发中,我将利用日志框架代替System.out.println
,但这可能不他们正在谈论的内容。
最终这取决于你正在做什么。如果要在调用fly
时显示值,则可以使用第一种方法。如果您计划使用调用fly
时获得的值,则可以使用第二种方法。 如果 想要做的只是打印消息,第二种方法没有任何价值。
如果没有看到你的方法如何相互混合,那么进行一揽子通话是不可能的。您必须选择最适合您应用的方法和方法。
答案 1 :(得分:0)
通常,直接从方法打印消息并不是一种坏方法,但它取决于上下文。有时域逻辑(飞行)应该与日志记录(System.out.println
)分开。如果您不想直接在fly
方法中打印消息,则可以创建第二种方法来包装fly
方法并打印所需的消息:
public void flyAndLog() {
fly();
System.out.println("Plane is flying.");
}
答案 2 :(得分:0)
你可以用复杂的方式做到这一点(不得不写下这个答案哈哈哈)
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);
}
}