2016-11-24 2 views
1

Я смотрел в JDK9 и я заметил, что в jshell вам не префикс Е() с System.out.printf() то вы можете написать Е («тест») но вы не можете писать Println ("тест")JDK 9 jshell принтf() специальный уход?

enter image description here

Является ли это особенностью только jshell? Как вы можете добиться такого же поведения в приложении?

Ниже ближе:

import static java.lang.System.out ; 
out.println("test"); 
out.printf("test"); 
+0

Для записи 'printf' был [удален] (https://stackoverflow.com/a/43864201/6730571) –

+0

Несогласен темпами инноваций в Java и принятия решений во многих областях языка в любом случае печать - это основная и важная функциональность, я не понимаю, почему они удалили ее из импорта по умолчанию оболочки – firephil

ответ

1

Iit выглядит printf является команда в JShell но println не является (так же, как в Баш оболочки). Метод printf(), используемый System.out, не совпадает с тем, который использует один jshell и поэтому не может быть статически импортирован в Java-приложение.

Источники:

http://jakubdziworski.github.io/java/2016/07/31/jshell-getting-started-examples.html https://jshelltutorial.com/jshells-printf-method/

+0

, чтобы проверить мои снимки экрана ... – firephil

+0

Спасибо за обновление, чтобы показать ваше использование. Я отредактировал свой ответ, если он все еще не имеет смысла, дайте мне знать, и я объясню дальше. –

+0

Я также искал некоторые идеи, о том, как это достигается ... Или это просто функция jshell – firephil

1

В более ранних версиях раннего доступа был предопределенный метод Printf, который перенаправляется на System.out.printf. С этим были две проблемы: это не стандартная Java, и, как указано в других ответах, это было непоследовательно в том, что print и println не были определены.

В текущем раннем доступе и в том, что будет поставляться, нет методов печати, которые автоматически определяются. Если вы хотите этого, начните с jshell:

jshell --start DEFAULT --start PRINTING 

Который даст вам полный набор методов печати.

Чтобы ответить на вторую часть вопроса, вы можете увидеть определения методов перенаправления, используя команду/method после запуска, как указано выше. Добавление их в класс даст вам доступ - но это довольно уродливо. Кроме того, вы можете сделать их общедоступными статическими методами в классе и импортировать их.