Vim脚本,用于插入链接方法调用的Java空引用检查
我想编写一个vim脚本来执行以下操作: 如果我的Java代码中有以下内容Vim脚本,用于插入链接方法调用的Java空引用检查,java,vim,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 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不合适的情况;其中一些可能已经得到了更好的处理
- 我怀疑这样的脚本实际上会引入bug或编译时错误;这里有一个我脑海中没有想到的例子 //在特殊情况下,请确保校准foo.bar().foobar() 公共富吧(){ //做工作。。。 }
// 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...
}
相反,使用一个静态分析工具(或多于1个),比如FindBugs,这确实是一个问题。我肯定不想维护该代码,即使您能够在Vim中轻松生成它。祝你好运。你认为用Java有更好的方法吗?除了愚蠢的变量名之外,让对象抛出异常而不是返回NULL。然后将整个调用链包装在try{}catch{}中,因为您使用了太多可能返回null的方法;这些是谁设计的?在非常高质量的Java代码中,null会出现,但并不经常出现。