【问题标题】:Is there a way to remove imports in JShell?有没有办法删除 JShell 中的导入?
【发布时间】:2018-03-30 05:50:23
【问题描述】:

我正在发现 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 命令,删除导入,单击接受并单击退出,但没有成功。

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

【问题讨论】:

  • 您可以重置状态:/reset.
  • @MarounMaroun 确实如此,但这也会删除所有其他活跃的东西。
  • @MarounMaroun 重置不会删除默认导入。 @Thibstars 那是你打算做的吗?
  • @nullpointer 不,我只是想删除我自己添加的导入。我现在自己添加了一个适合我需要的答案。

标签: java import java-9 jshell


【解决方案1】:

经过一番搜索,我设法find a solution。它是/list(知道要删除哪一行)和/drop 的组合。

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

删除一个 sn-p,使其处于非活动状态。提供姓名或 ID 导入、类、方法或变量。对于不止一个 sn-p, 用空格分隔名称和 ID。使用/list 命令查看 代码 sn-ps 的 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.*

【讨论】:

    【解决方案2】:

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

    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 更新都必须重新创建文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-20
      • 1970-01-01
      • 2018-03-25
      • 2012-04-29
      • 2013-11-17
      • 1970-01-01
      • 2020-06-11
      • 1970-01-01
      相关资源
      最近更新 更多