Module jdk.jshell
Package jdk.jshell

Class JShell.Builder

java.lang.Object
jdk.jshell.JShell.Builder
封装类:
JShell

public static class JShell.Builder extends Object
JShell实例的构建器。通过使用此类上的setter方法创建JShell的自定义实例。在这之后,使用build()方法创建一个JShell实例。这些方法都可以链接在一起。例如,设置远程输出和错误流:
 
     JShell myShell =
       JShell.builder()
         .out(myOutStream)
         .err(myErrStream)
         .build();  
如果不需要特殊设置,只需使用JShell.builder().build()或快捷方式JShell.create()
  • Method Details

    • in

      public JShell.Builder in(InputStream in)
      设置运行评估的输入(为System.in)。注意:使用System.in进行片段或其他用户输入的应用程序不能将System.in用作远程进程的输入流。

      InputStreamread方法可能会抛出InterruptedIOException以表示用户取消了输入。当前正在运行的片段将自动停止

      如果未设置此项,默认情况下将提供一个空输入流——new ByteArrayInputStream(new byte[0])

      参数:
      in - 要传输到远程执行过程中的System.inInputStream
      返回:
      Builder实例(用于链接初始化)
    • out

      public JShell.Builder out(PrintStream out)
      设置运行评估的输出(为System.out)。控制进程和远程进程可以共享System.out

      如果未设置此项,默认情况下为System.out

      参数:
      out - 要传输到远程执行过程中的System.outPrintStream
      返回:
      Builder实例(用于链接初始化)
    • err

      public JShell.Builder err(PrintStream err)
      设置运行评估的错误输出(为System.err)。控制进程和远程进程可以共享System.err

      如果未设置此项,默认情况下为System.err

      参数:
      err - 要传输到远程执行过程中的System.errPrintStream
      返回:
      Builder实例(用于链接初始化)
    • console

      public JShell.Builder console(JShellConsole console)
      设置运行评估的控制台。

      如果未设置此项,默认情况下为无控制台(在运行片段时System.console()将返回null)。

      参数:
      console - 在运行片段时要使用的控制台
      返回:
      Builder实例(用于链接初始化)
      自JDK版本:
      21
    • tempVariableNameGenerator

      public JShell.Builder tempVariableNameGenerator(Supplier<String> generator)
      设置用于VarSnippet的临时变量名称生成器。

      除非有明确需要,否则不要使用此方法。

      生成器将用于新创建的VarSnippet实例。变量的名称通过PersistentSnippet.name()查询。

      回调在处理片段时发送,JShell状态不稳定。不能从回调中对JShell实例进行任何调用。

      生成的名称必须在活动片段中是唯一的。

      默认行为(如果未设置或generator为null)是将名称生成为带有前缀美元符号("$")的顺序号。

      参数:
      generator - 用于生成临时变量名称字符串的Suppliernull
      返回:
      Builder实例(用于链接初始化)
    • idGenerator

      public JShell.Builder idGenerator(BiFunction<Snippet,Integer,String> generator)
      设置用于片段标识名称生成的生成器。

      除非有明确需要,否则不要使用此方法。

      生成器将用于新创建的Snippet实例。标识名称(id)通过Snippet.id()访问,并且可以在EvalExceptionUnresolvedReferenceExceptionStackTraceElement.getFileName()中看到。

      生成器的输入是Snippet和一个整数。对于会覆盖彼此的两个片段,整数将相同,否则是唯一的。

      回调在处理片段时发送,片段和整体状态都不稳定。不应进行更改系统状态(包括片段状态)的调用。可以查询片段,但不能对Snippet.id()进行调用。不能从回调中对JShell实例进行任何调用,除非是对status(Snippet)的调用。

      默认行为(如果未设置或generator为null)是将id生成为转换为字符串的整数。

      参数:
      generator - 用于生成id字符串的BiFunctionnull
      返回:
      Builder实例(用于链接初始化)
    • remoteVMOptions

      public JShell.Builder remoteVMOptions(String... options)
      设置用于启动VM的附加选项。
      参数:
      options - 远程VM的选项
      返回:
      Builder实例(用于链接初始化)
    • compilerOptions

      public JShell.Builder compilerOptions(String... options)
      添加编译器选项。这些额外选项将用于编译器的解析、分析和代码生成调用。干扰结果的选项不受支持,并且对JShell的操作具有未定义的影响。
      参数:
      options - 编译器调用的附加选项
      返回:
      Builder实例(用于链接初始化)
    • executionEngine

      public JShell.Builder executionEngine(String executionControlSpec)
      设置用于执行的自定义引擎。片段执行将由指定的ExecutionControl实例提供。在这些重载的executionEngine构建器方法中最多使用一个。
      参数:
      executionControlSpec - 执行控制规范,已在jdk.jshell.spi包文档中记录。
      返回:
      Builder实例(用于链接初始化)
    • executionEngine

      public JShell.Builder executionEngine(ExecutionControlProvider executionControlProvider, Map<String,String> executionControlParameters)
      设置用于执行的自定义引擎。片段执行将由指定的ExecutionControl实例提供。在这些重载的executionEngine构建器方法中最多使用一个。
      参数:
      executionControlProvider - 用于提供执行引擎的提供程序
      executionControlParameters - 提供程序的参数,或null表示默认参数
      返回:
      Builder实例(用于链接初始化)
    • fileManager

      配置用于编译和源代码分析的FileManager。如果未设置或传递null,则将使用编译器的标准文件管理器(身份映射)。用于特殊应用程序中需要覆盖编译器正常文件处理的情况。有关更多信息,请参阅文件管理器API。
      参数:
      mapping - 给定编译器的标准文件管理器,返回要使用的文件管理器的函数
      返回:
      Builder实例(用于链接初始化)
    • build

      public JShell build() throws IllegalStateException
      构建一个JShell状态引擎。这是所有JShell功能的入口点。这将创建一个用于执行的远程进程。因此,关闭返回的实例非常重要。
      返回:
      状态引擎
      抛出:
      IllegalStateException - 如果无法创建JShell实例。