【问题标题】:Creating new live-templates with import statements in IntelliJ IDEA在 IntelliJ IDEA 中使用导入语句创建新的实时模板
【发布时间】:2020-06-19 00:32:17
【问题描述】:

这是我要移植的 Eclipse 模板:

${:import(org.apache.log4j.Logger)}
private static final Logger LOG = Logger.getLogger(${enclosing_type}.class);

我目前在IDEA中的版本如下:

private static final Logger LOG = Logger.getLogger($CLASS_NAME$.class);$END$

其中$CLASS_NAME$ 配置为使用className() 作为其表达式。

不幸的是,我没有找到任何关于添加导入语句的文档。有没有相当于 Eclipse ${:import(...)} 的东西?

【问题讨论】:

    标签: intellij-idea code-templates


    【解决方案1】:

    根据this post,它只打算使用完全限定的表达式。我试过了,这对我有用:

    private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger($CLASS_NAME$.class);$END$
    

    IDEA 会自动缩短它并添加必要的导入语句:

    import org.apache.log4j.Logger;
    // ...
    private static final Logger LOG = Logger.getLogger(MyClass.class);
    

    如果您想亲自尝试,请注意您首先必须通过编辑变量CLASS_NAME 定义为className()。还要确保您通过 Change(在底部)允许您的 Live Template for Java 声明。这是最终设置的屏幕截图:

    【讨论】:

    • 这里我很不高兴,因为我不明白为什么 IntelliJ 没有神奇地生成适当的导入。您的建议不仅完成了我的尝试,而且比我希望的要好。这样,它更明确,没有歧义的余地。不错!
    • @KrishPrabakar 在问题中,假定 CLASS_NAME 已定义为 className()。我现在添加了一个示例,它应该有助于自己理解答案。
    • @PhilippClaßen 是的,现在肯定有帮助
    • 有没有办法用 javascript/typescript 做类似的事情?这真的很方便:)
    【解决方案2】:

    只是为了在这里为新访客节省一点时间:接受的答案现在需要进行一些更改。
    转到Settings -> Editor -> Live Templates,选择others,添加模板:

    private static final org.apache.logging.log4j.Logger logger = org.apache.logging.log4j.LogManager.getLogger($CLASS_NAME$.class);$END$
    

    然后,按左侧的Edit Variables 并将CLASS_NAME 的表达式设置为className()
    毕竟,将底部的上下文设置为Java -> Declaration(如果需要,还可以设置Groovy -> Declaration)。 导入将在插入时神奇地生成。

    【讨论】:

    • @PhilippClaßen 好吧,类路径已更改。我还添加了有关模板配置的更多信息。
    • 感谢 CLASS_NAME 技巧。这不是很明显!
    【解决方案3】:

    现在可以使用静态导入添加实时模板

    您必须在选项中检查静态导入

    @org.junit.Test
    public void should$EXPR$when$CONDITION$() {
        org.junit.Assert.assertThat(null, org.hamcrest.CoreMatchers.is(org.hamcrest.CoreMatchers.nullValue())); 
    }
    

    【讨论】:

      【解决方案4】:

      对于 apache commons 日志使用:

      private static final org.apache.commons.logging.Log LOG = org.apache.commons.logging.LogFactory.getLog($CLASS_NAME$.class);$END$
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-08-27
        • 2011-09-19
        • 1970-01-01
        • 2015-12-02
        • 2016-06-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多