jshell - 无法找到 printf
jshell - unable to find printf
为什么我的 jshell 实例(JDK 版本 9-ea)无法识别 printf()
语句?以下是我观察到的错误,
jshell> printf("Print number one - %d",1)
| Error:
| cannot find symbol
| symbol: method printf(java.lang.String,int)
| printf("Print number one - %d",1)
| ^----^
我可以访问 printf,只要我以常规方式指定它即可。
jshell> System.out.printf("Print number one - %d",1)
Print number one - 1 ==> java.io.PrintStream@1efbd816
有什么指点吗?
没有 jshell 简单地 可以工作吗?这不能像这样工作,因为 outside PrintStream
没有定义这样的方法。
您可以像这样定义自己的 printf
:
jshell> private void printf(String s) { System.out.println(s); }
稍后使用它:
jshell> printf("test")
test
Java 是一种面向对象的语言,如果没有与该方法相关联的对象,则不能调用非静态方法。 printf
是 class PrintStream
的非静态方法,没有 PrintStream
实例就无法调用它。
标准 Java 库中有一些 PrintStream
实例,例如 System.out
和 System.err
,因此您可以调用 System.out.printf()
或 System.err.printf()
,但是普通的 printf()
不起作用,因为 jshell
不知道这个 printf()
属于哪个对象。
早期版本的 JShell 有一个预定义的 printf
方法,但它已从早期访问版本中删除。您当然可以定义自己的 printf 方法:
jshell> void printf(String format, Object... args) { System.out.printf(format, args); }
或者您可以通过使用以下命令启动 JShell 来恢复早期版本中的打印方法:
jshell --start DEFAULT --start PRINTING
(如果您只使用 --start PRINTING
,您将不会获得默认导入。)
有关详细信息,请参阅实现它的错误 JDK-8172102 in the Java bug database and changeset b2e915d476be。
这可能更方便:
jshell> /set start -retain DEFAULT PRINTING
(需要设置一次,下次你可以不带任何参数直接启动jshell)。参见 official jshell documentation。
为什么我的 jshell 实例(JDK 版本 9-ea)无法识别 printf()
语句?以下是我观察到的错误,
jshell> printf("Print number one - %d",1)
| Error:
| cannot find symbol
| symbol: method printf(java.lang.String,int)
| printf("Print number one - %d",1)
| ^----^
我可以访问 printf,只要我以常规方式指定它即可。
jshell> System.out.printf("Print number one - %d",1)
Print number one - 1 ==> java.io.PrintStream@1efbd816
有什么指点吗?
没有 jshell 简单地 可以工作吗?这不能像这样工作,因为 outside PrintStream
没有定义这样的方法。
您可以像这样定义自己的 printf
:
jshell> private void printf(String s) { System.out.println(s); }
稍后使用它:
jshell> printf("test")
test
Java 是一种面向对象的语言,如果没有与该方法相关联的对象,则不能调用非静态方法。 printf
是 class PrintStream
的非静态方法,没有 PrintStream
实例就无法调用它。
标准 Java 库中有一些 PrintStream
实例,例如 System.out
和 System.err
,因此您可以调用 System.out.printf()
或 System.err.printf()
,但是普通的 printf()
不起作用,因为 jshell
不知道这个 printf()
属于哪个对象。
早期版本的 JShell 有一个预定义的 printf
方法,但它已从早期访问版本中删除。您当然可以定义自己的 printf 方法:
jshell> void printf(String format, Object... args) { System.out.printf(format, args); }
或者您可以通过使用以下命令启动 JShell 来恢复早期版本中的打印方法:
jshell --start DEFAULT --start PRINTING
(如果您只使用 --start PRINTING
,您将不会获得默认导入。)
有关详细信息,请参阅实现它的错误 JDK-8172102 in the Java bug database and changeset b2e915d476be。
这可能更方便:
jshell> /set start -retain DEFAULT PRINTING
(需要设置一次,下次你可以不带任何参数直接启动jshell)。参见 official jshell documentation。