Подтвердить что ты не робот

Почему я не могу импортировать статический файл java.lang.System.out.println?

Кажется странным, что я не могу импортировать статические java.lang.System.out.println, когда я могу импортировать статические java.lang.Math.abs. Есть ли какая-то причина этого, или я делаю что-то действительно глупое, чего я сейчас не вижу? (Использование Eclipse.)

4b9b3361

Ответ 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