有没有办法在 JShell 中删除导入?
Is there a way to remove imports in JShell?
我发现了 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
有没有办法在不杀死活动的情况下删除后者的导入session/restarting?
我已经尝试发出 /edit
命令,删除导入,单击接受并单击退出,但没有成功。
如评论中所述,/reset
删除了导入,但它也删除了之前在会话中输入的任何其他内容。有没有特定的方法可以只删除导入语句?
经过一番搜索,我设法 find a solution。它是 /list
(知道要删除哪一行)和 /drop
.
的组合
/drop [name[ name...]|id[ id...]]
Drops a snippet, making it inactive. Provide either the name or the ID
of an import, class, method, or variable. For more than one snippet,
separate the names and IDs with a space. Use the /list
command to see
the IDs of code snippets.
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.*
对于那些正在寻找一种方法来自动导入公共库的人:
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<>();
| ^------^
这可以修复,但需要创建一个启动脚本:
- 开始
jshell JAVASE
- 显示导入:
/imports
- 将其复制到一个文件中,删除所有带有
java.awt
和其他不需要的导入的行
- 将这些导入保存到文件中
jshell-imports
- 开始
jshell jshell-imports
jshell> List<Duration> durations = new ArrayList<>();
durations ==> []
当然,每次 Java 更新都必须重新创建文件。
我发现了 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
有没有办法在不杀死活动的情况下删除后者的导入session/restarting?
我已经尝试发出 /edit
命令,删除导入,单击接受并单击退出,但没有成功。
如评论中所述,/reset
删除了导入,但它也删除了之前在会话中输入的任何其他内容。有没有特定的方法可以只删除导入语句?
经过一番搜索,我设法 find a solution。它是 /list
(知道要删除哪一行)和 /drop
.
/drop [name[ name...]|id[ id...]]
Drops a snippet, making it inactive. Provide either the name or the ID of an import, class, method, or variable. For more than one snippet, separate the names and IDs with a space. Use the
/list
command to see the IDs of code snippets.
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.*
对于那些正在寻找一种方法来自动导入公共库的人:
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<>();
| ^------^
这可以修复,但需要创建一个启动脚本:
- 开始
jshell JAVASE
- 显示导入:
/imports
- 将其复制到一个文件中,删除所有带有
java.awt
和其他不需要的导入的行 - 将这些导入保存到文件中
jshell-imports
- 开始
jshell jshell-imports
jshell> List<Duration> durations = new ArrayList<>();
durations ==> []
当然,每次 Java 更新都必须重新创建文件。