我想编写一个 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/