3

我发现了 JShell,我发现了默认添加的导入:

jshell> /imports
|    import java.io.*
|    import java.math.*
|    import java.net.*
|    import java.nio.file.*
|    import java.util.*
|    import java.util.concurrent.*
|    import java.util.function.*
|    import java.util.prefs.*
|    import java.util.regex.*
|    import java.util.stream.*

之后,我使用以下命令添加了自己的导入:

import java.lang.Math

有没有办法在不终止活动会话/重新启动的情况下删除后一个导入?

我尝试发出/edit命令,删除导入,单击接受并单击退出,但这并没有成功。

如评论中所述,/reset删除了导入,但它也删除了之前在会话中输入的任何其他内容。有没有一种特定的方法可以只删除导入语句?

4

2 回答 2

4

经过一番搜索,我设法找到了解决方案。它是/list(知道要删除哪一行)和/drop.

/drop [name[ name...]|id[ id...]]

删除一个片段,使其处于非活动状态。提供导入、类、方法或变量的名称或 ID。对于多个片段, 用空格分隔名称和 ID。使用该/list命令查看代码片段的 ID。

jshell> import java.lang.Math

jshell> /list

   1 : import java.lang.Math;

jshell> /drop 1

jshell> /imports
|    import java.io.*
|    import java.math.*
|    import java.net.*
|    import java.nio.file.*
|    import java.util.*
|    import java.util.concurrent.*
|    import java.util.function.*
|    import java.util.prefs.*
|    import java.util.regex.*
|    import java.util.stream.*
于 2017-10-18T12:17:35.103 回答
0

对于那些正在寻找自动导入公共库的方法的人:

jshell JAVASE

这将自动导入约 200 个包。就像我们在 Java 世界中还没有看到足够多的超凡脱俗的设计决策一样,在解决第一个问题时微笑可能会消失List

jshell> List<Duration> durations = new ArrayList<>();
|  Error:
|  reference to List is ambiguous
|    both class java.awt.List in java.awt and interface java.util.List in java.util match
|  List<Duration> durations = new ArrayList<>();
|  ^--^
|  Error:
|  reference to Duration is ambiguous
|    both class javax.xml.datatype.Duration in javax.xml.datatype and class java.time.Duration in java.time match
|  List<Duration> durations = new ArrayList<>();
|       ^------^

这可以修复,但需要创建一个启动脚本:

  1. 开始jshell JAVASE
  2. 显示进口:/imports
  3. 将其复制到文件中,删除所有包含java.awt和其他不需要的导入的行
  4. 将这些导入保存到文件中jshell-imports
  5. 开始jshell jshell-imports
jshell> List<Duration> durations = new ArrayList<>();
durations ==> []

当然,必须为每次 Java 更新重新创建该文件。

于 2021-11-12T11:03:06.967 回答