【问题标题】:Intellij Idea Live Template to create field and method at same timeIntellij Idea Live Template 同时创建字段和方法
【发布时间】:2018-10-03 00:50:20
【问题描述】:

当我创建使用该字段的方法时如何自动创建字段变量。我已经创建了这样的模板:

void $METHOD_NAME$() {
    $FIELD_NAME$ = true;
}

当我在方法中输入字段名称(例如mState)时,将创建字段为:

private boolean mState = false;

希望有人帮忙。对不起,我的错。

【问题讨论】:

  • 你能给出一个你希望它生成的代码的真实例子吗? (是getter/setter还是别的什么?)你也可以分享你的参数配置吗? (最好是配置截图)
  • 感谢您的回复,抱歉迟到了。我想要这样的东西:``` // 这会自动生成 private boolean mBack = false; // this from template @Override public void onBackPressed() { if (mBack) super.onBackPressed(); // 其他代码 } ``` 这是我的配置:!image.
  • 这是一个巨大的模板!刚发现该功能时,我曾经制作较大的模板,但发现较小的模板更易于使用。

标签: android-studio intellij-idea ide live-templates


【解决方案1】:

鉴于您的模板屏幕截图,您还可以使用以下实时模板创建一个字段:

private boolean $param$ = false;

@Override
public void onBackPressed() {
  if ($param$) super.onBackPressed();
  android.widget.Toast.makeText(this, "$message$",
    android.widget.Toast.LENGTH_SHORT).show();
  $param$ = true;
  final Handler handler = new Handler();
  handler.postDelayed(new Runnable() {
    @Override
    public void run() {
      $param$ = false;
    }
  }, 100);
}

其中 $param$ 和 $message$ 是没有任何特殊的常规变量。

但是,就像我在对您的问题的评论中所说的那样,我建议将其拆分为几个较小的模板。 考虑将其拆分为: 字段 + 方法只需:

private boolean $param$ = false;    

@Override
public void onBackPressed() {
  if ($param$) super.onBackPressed();
  $param$ = true;
}

然后为消息创建一个模板:

android.widget.Toast.makeText(this, "$message$", android.widget.Toast.LENGTH_SHORT).show();

最后但同样重要的是,为 postDelayed 创建一个模板:

final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        $END$
    }
}, $delay$);

注意:$delay$ 作为奖励,您甚至可以给它一个默认值或创建一个预定义值列表以便于使用。

注意2:我用$END$代替了$param$ = false;。一旦您选择了延迟,这会将您的光标定位在此处。现在您可以在此处手动键入 mState = false,或者此时在上下文中需要的任何代码。这使得模板更加灵活和易于使用。

PS。我想您只想在值为 false 时(在第一次调用时)调用 super.onBackPressed()。在这种情况下,请改用if (!$param$)。

// 更新:

为了将新添加的字段与其他字段分组,而不是在其他方法之间的类中的某个位置,重新排列代码 通过菜单使用:Code -> rearrange code。 要自定义此设置,请检查您的排列设置:settings -> code style -> <language> -> arrangement

【讨论】:

  • >模板好大啊!哦,我想你是对的,我太热情了,没有想到这一点。但如果我创建这样的模板:
     private boolean $param$ = false; // 我怎样才能保持这里已经写好的其他方法位置 @Override public void onBackPressed() { if ($param$) super.onBackPressed(); $参数$ =真; } 
  • 格式在 cmets 中丢失,请改为在原始问题中更新。我想您想对字段和方法进行分组,并且不让字段在已经编写的其他方法之间浮动,对吗?在这种情况下,请检查代码样式设置下的排列设置。在这里您可以对字段和方法等进行分组(使用“重新排列代码”操作调用它)
猜你喜欢
  • 1970-01-01
  • 2021-12-22
  • 2013-06-01
  • 2014-05-26
  • 2022-08-19
  • 2015-12-02
  • 1970-01-01
  • 1970-01-01
  • 2017-06-04
相关资源
最近更新 更多