java - 在 JShell 中将变量转换为其原始形式

标签 java java-9 jshell

我正在玩 JShell并尝试将变量转换为其原始形式。为此,我使用 /r 重置了 REPL 中的所有内容,然后我导入了 java.util.* 并创建了一个列表:

-> import java.util.*;

-> List<String> l = new ArrayList<>(Arrays.asList("a", "b"));
|  Modified variable l of type List<String> with initial value [a, b]

现在我正在尝试将列表值转换为大写,所以我正在做:

-> l.replaceAll(String::toUpperCase)

-> l
|  Variable l of type List<String> has value [A, B]

列出我使用 /list(或 /l)键入的已执行源显示:

-> /l

   1 : List<String> l = new ArrayList<>(Arrays.asList("a", "b"));
   2 : l.replaceAll(String::toUpperCase)
   3 : l

现在,当我尝试将列表重置为 1 阶段(在更改其值之前)时,我得到了 import 语句:

-> /1
import java.util.*;

有人知道为什么会这样吗?我在没有 import 语句的情况下尝试了相同的方法,但得到了相同的结果(我认为这是因为它被显式导入)。


我刚刚注意到如果我写 /l all 我会得到:

-> /l all

s1 : import java.util.*;
s2 : import java.io.*;
s3 : import java.math.*;
s4 : import java.net.*;
s5 : import java.util.concurrent.*;
s6 : import java.util.prefs.*;
s7 : import java.util.regex.*;
s8 : void printf(String format, Object... args) { System.out.printf(format, args); }
 1 : String a = "a";
 2 : a = "b"

我不知道为什么 /1 执行第一个 import 语句而不是首先执行字符串赋值。也很奇怪,即使 import java.util.*; 在那里,s5import java.util.concurrent.*; (这显然是多余的)。

最佳答案

编辑

看起来问题已在 JDK 9 EA build 107 on 03-01-2016 (#4560) 中解决。


经过数小时的挖掘,我找到了解释。命令:

/list all

列出所有 执行,包括在REPL 启动之前 安静和自动执行的启动条目:

s1 : import java.util.*;
s2 : import java.io.*;
s3 : import java.math.*;
s4 : import java.net.*;
s5 : import java.util.concurrent.*;
s6 : import java.util.prefs.*;
s7 : import java.util.regex.*;
s8 : void printf(String format, Object... args) { System.out.printf(format, args); }
 1 : String a = "a";
 2 : a = "b"

一种解决方案是使用 /setstart 命令并将包含您指定的条目的文件传递给它。这样,您将无法使用默认导入和方便的打印方法。

另一种解决方案是编写 /9(最后一个静默输入之后的状态)。

老实说,我对这两种解决方案都不满意,我希望尽快有更好的解决方案。

关于java - 在 JShell 中将变量转换为其原始形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33783732/

相关文章:

java - 无法暂停 Activity ?

javafx - javafx 饼图标签中的 Java9 错误

JDK12 的 Java 运行时版本

java - 如何以编程方式将变量添加到调用某些代码的 Shell?

java - JDK 9 是否应该不允许在覆盖方法中引用最终字段的 Lambda 表达式实例化?

java - 如何在脚本末尾关闭 jshell?

java - 如何在文本文件中填充方法的输出

java - Android ImageButton 在调整大小时裁剪

java JFormattedTextField

java - 模块 A 和 B 将包 some.package 导出到 Java 9 中的模块 C