为什么我不能导入静态java.lang.System.out.println?

Dou*_*ell 35 java

当我可以导入静态java.lang.Math.abs时,我无法导入静态java.lang.System.out.println,这似乎很奇怪.这背后有什么原因,或者我做的事情真的很愚蠢,我现在还没看到?(使用Eclipse.)

Str*_*ior 52

Math是一个类,其上abs是静态方法.System.out是静态字段而不是类.所以它的println方法实际上不是静态方法,而是静态字段上的实例方法.

  • 只是为了补充一点,你可以改为`import static java.lang.System.out`,然后从那里去`out.println()`. (31认同)

rat*_*eak 19

因为java.lang.System.out是您调用的静态对象(PrintStream)println.

虽然在日食中你可以输入sysout然后按ctrl- space将它扩展到System.out.println();

  • IntelliJ 的“sout” (3认同)

Pet*_*rey 8

无法以这种方式导入非静态方法,但是您可以这样做

public static void println() {
    System.out.println();
}

// elsewhere
println();     // can be inlined
Run Code Online (Sandbox Code Playgroud)

  • @Thufir 当一个方法是,它的代码被放置在调用代码中并被优化。重要的是这没有开销。 (2认同)

cev*_*ing 7

彼得的回答似乎是最好的解决方法.但没有论据,用例有点受限.

static<T> void println(T arg) { System.out.println(arg); }
Run Code Online (Sandbox Code Playgroud)

  • 这并没有提供问题的答案.要对作者进行批评或要求澄清,请在帖子下方留言. (2认同)
  • @curtisk 这既不是批评也不是要求澄清。这只是一个更实用的选择。 (2认同)
  • 有点旧,但为什么是泛型而不是“对象”? (2认同)