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

时间:2011-09-01 23:25:52

标签: java

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

7 个答案:

答案 0 :(得分:49)

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

答案 1 :(得分:19)

因为java.lang.System.outstatic object (a PrintStream),您可以在其上调用println

虽然在eclipse中你可以输入sysout,然后按 ctrl - space 将其扩展为System.out.println();

答案 2 :(得分:8)

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

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

// elsewhere
println();     // can be inlined

答案 3 :(得分:7)

Peter的回答似乎是最好的解决方法。但没有争论,用例有点受限。

static<T> void println(T arg) { System.out.println(arg); }

答案 4 :(得分:3)

结合printf和println

public static void println(Object format, Object... args) {
    System.out.printf(format.toString(), args);
    System.out.println();
}

@Test
public void testPrintln(){
    println(100);
    println("abc");
    println(new Date());
    println("%s=%d","abc",100);
}

输出

100
abc
Wed Nov 01 22:24:20 CST 2017
abc=100

答案 5 :(得分:1)

注意: import static仅适用于静态字段或类的静态方法。

你不能import static java.lang.System.out.println,因为println方法不是任何类的静态方法(out甚至不是类,它是PrintStream的实例)。

您可以import static java.lang.Math.abs,因为abs方法是类Math的静态方法。

我的建议是,由于outSystem(这是一个类)的静态字段,您可以import staic java.lang.System.out,然后在您的代码中可以使用out.println而不是简称System.out.println

答案 6 :(得分:0)

我的解决方案

package example.tools;

public class ShowMe {
    /*public static void print(String arg) {
       System.out.println(arg);
    }*/
    // or better as ceving's example
    public static<T> void print(T arg) {
        System.out.println(arg);
    }
}

在另一堂课

import static example.tools.ShowMe.*;
    public class Flower {
        Flower() {
            print("Rose");
        }
    }