当我可以导入静态java.lang.Math.abs时,我无法导入静态java.lang.System.out.println,这似乎很奇怪。这背后有什么原因,或者我做的事情真的很愚蠢,我现在还没看到? (使用Eclipse。)
答案 0 :(得分:49)
Math
是一个类,abs
是一个静态方法。 System.out
是静态字段而不是类。所以它的println
方法实际上不是静态方法,而是静态字段上的实例方法。
答案 1 :(得分:19)
因为java.lang.System.out
是static 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
的静态方法。
我的建议是,由于out
是System
(这是一个类)的静态字段,您可以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");
}
}