有没有办法在 JShell 中删除导入?

问题描述 投票:0回答:2

我正在发现 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
删除导入,但它也删除先前在会话中输入的任何其他内容。有没有一种特定的方法可以仅删除导入语句?

java import java-9 jshell
2个回答
5
投票

经过一番搜索,我设法找到了解决方案。它是

/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.*
    

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

$ jshell JAVASE
这会自动导入大约 200 个 Java SE 包。但存在重复的类名:

List<Duration>

不明确(
java.awt.List
javax.xml.datatype.Duration
)。

jshell> List<Duration> list; | 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> list; | ^--^ | 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> list; | ^------^
这可以通过启动脚本来解决:

echo "/imports" | jshell JAVASE - | awk '{printf("%s %s;\n", $1, $2)}' > jshell-imports-tmp remove_imports=(".awt." " org." " javax.") printf '%s\n' "${remove_imports[@]}" | grep -Fvf - jshell-imports-tmp > jshell-imports echo "/set start -retain jshell-imports" | jshell - rm jshell-import*
检查它是否有效

jshell> List<Duration> list; list ==> null
    
© www.soinside.com 2019 - 2024. All rights reserved.