java - Vim 脚本为链式方法调用插入 Java 空引用检查

标签 java vim

我想编写一个 vim 脚本来执行以下操作:

如果我的 Java 代码中有以下内容,

Z z = obj1.foo().bar().foo1().bar1()

应该替换为

if(obj1 != null) {  
  T1 o1 = obj1.foo();  
  if(o1 != null) {  
    T2 o2 = o1.bar();  
    if(o2!=null) {  
      T3 o3 = o2.foo1();  
      if(o3 != null) {  
         z = o3.bar1();  
      }  
      else   
         z = null;  
    }  
    else   
         z = null;  
  }  
  else  
     z = null;  
}  
else   
  z = null  

我想编写一个 vi 命令,它将逗号分隔的类型 T1、T2 ... 等列表作为参数,以给我这个大东西。

如何学习 vimscripting?

最佳答案

就像那些对您的问题发表评论的人一样,我相信有更好的方法来处理您的问题。

以下是我对你的想法的担忧:

  • 该代码可读性不太好;这将使将来调试或增强代码变得更加困难和耗费精力
  • 即使在不可能出现空引用的情况下,您的方法也会做出调整
  • 您的代码中可能存在不适合返回 null 的情况;其中一些可能已经得到了更好的处理
  • 我怀疑这样的脚本实际上会引入错误或编译时错误;这是我突然想到的一个例子

    //特殊情况下一定要cal foo.bar().foobar() 公共(public) Foo 酒吧(){ //做工作... }

变成...

// Be sure to cal if(foo != null) {
  Bar bar = foo.bar();
  if (bar != null) {
    Foobar foobar = bar.foobar();
    in special cases
  }
}
public Foo bar() {
  // do work...
}

相反,使用像FindBugs这样的静态分析工具(或超过1个),这确实是good at catching likely null pointer de-references .

关于java - Vim 脚本为链式方法调用插入 Java 空引用检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2255817/

相关文章:

java - 此测试值会在系统中造成感染吗?

java - 在 Java 下从 Mach-o 二进制文件获取 UUID?

java - 在一个应用程序中对多个 servlet 进行相同的验证

vim - 在 "EVERY"选项卡中自动打开 NERDTree

vim - vim:NERDTree如何:创建/重命名/移动文件/目录

java - jSplitPane 当鼠标悬停时显示和隐藏左 Pane

java - request.getAttribute() 在 jsp 中没有显示正确的输出

vim - 在Vim中,如何在 block 模式下剪切而在正常模式下粘贴,作为新行插入?

vim - 如何在 vim 中搜索包含 2 个特定单词的行?

file - vim:gf 的反义词是什么?