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

sf6xfgos  于 2023-02-02  发布在  Java
关注(0)|答案(7)|浏览(143)

奇怪的是,我不能导入静态的java.lang.System.out.println,而我可以导入静态的java.lang.Math.abs。这背后有什么原因吗?或者我做了一些我现在看不到的非常愚蠢的事情?(使用Eclipse)

kb5ga3dv

kb5ga3dv1#

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

njthzxwz

njthzxwz2#

因为java.lang.System.out是一个static object (a PrintStream),你可以在它上面调用println
不过在eclipse中,您可以输入sysout,然后按ctrl-space将其展开为System.out.println();

uelo1irk

uelo1irk3#

非静态方法不能以这种方式导入。
但是,您可以执行以下操作:

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

// elsewhere
println("Hello World");     // can be inlined
mqkwyuun

mqkwyuun4#

Peter的答案似乎是最好的解决方案。但是如果没有参数,用例就有点有限了。

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

e5njpo685#

合并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
ergxz8rk

ergxz8rk6#

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

不能使用import static java.lang.System.out.println,因为println方法不是任何类的静态方法(out甚至不是类,它是PrintStream的示例)。
可以使用import static java.lang.Math.abs,因为abs方法是Math类的静态方法。
我的建议是,由于outSystemSystem是一个类)的静态字段,因此可以使用import static java.lang.System.out,然后在代码中可以使用out.println,而不是简称为System.out.println

2nc8po8w

2nc8po8w7#

我的解决方案

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");
        }
    }

相关问题