Java:从外部主方法调用println

时间:2018-04-12 15:49:07

标签: java methods println

所以我正在学校为我的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.";
}

3 个答案:

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