Кажется странным, что я не могу импортировать статические java.lang.System.out.println, когда я могу импортировать статические java.lang.Math.abs. Есть ли какая-то причина этого, или я делаю что-то действительно глупое, чего я сейчас не вижу? (Использование Eclipse.)
Почему я не могу импортировать статический файл java.lang.System.out.println?
Ответ 1
Math
- класс, на котором abs
является статическим методом. System.out
- статическое поле, а не класс. Таким образом, его метод println
на самом деле не является статическим методом, а методом экземпляра в статическом поле.
Ответ 2
Потому что java.lang.System.out
является статическим объектом (PrintStream), на который вы вызываете println
.
Хотя в eclipse вы можете ввести sysout
, а затем нажмите ctrl - space, чтобы он был расширен до System.out.println();
Ответ 3
Нестатические методы не могут быть импортированы таким образом, но вы можете это сделать
public static void println() {
System.out.println();
}
// elsewhere
println(); // can be inlined
Ответ 4
Peter ответ кажется лучшей работой. Но без аргументов варианты использования немного ограничены.
static<T> void println(T arg) { System.out.println(arg); }
Ответ 5
import static
работает только с статическими полями или методами, тогда вы можете использовать эти поля или метод в своем коде, не ссылаясь на его собственный класс. Поэтому при использовании import static
вы всегда должны указывать статическое поле или метод.
Вы не можете import static java.lang.System.out.println
, потому что println
не является статическим методом System.out
, который является экземпляром PrintStream
. Поскольку out
является статическим полем System
, вы можете import staic java.lang.System.out
, а затем в своем коде вы можете использовать out.println
вместо System.out.println
.
Вы можете import static java.lang.Math.abs
, потому что метод abs
является статическим методом класса Math
.
Ответ 6
Объединить 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