Java eclipse自动生成=空递归调用

Java eclipse自动生成=空递归调用,java,eclipse,templates,eclipse-jdt,Java,Eclipse,Templates,Eclipse Jdt,给定java代码,例如: Something v = a.getB().getC().getD().getE(); Eclipse(模板或外部插件)中是否有方法生成安全链调用,如下所示: if(a!=null && a.getB()!=null && a.getB().getC()!=null && a.getB().getC().getD()!=null && a.getB().getC

给定java代码,例如:

Something v = a.getB().getC().getD().getE();
Eclipse(模板或外部插件)中是否有方法生成安全链调用,如下所示:

if(a!=null && 
   a.getB()!=null &&
   a.getB().getC()!=null &&
   a.getB().getC().getD()!=null &&        
   a.getB().getC().getD().getE()!=null){
          Something v = a.getB().getC().getD().getE(); 
   }        

只有在没有人会读你的代码时才这样做。尽量避免生成代码,尤其是您要求的代码

getB()
方法被额外调用4次,以此类推


通过手动检查null,您将更快地学习编码,减少不依赖自动代码更正的bug;)

您是否考虑过使用
try{}catch(NullPointerException e){}
块?它可能感觉不那么优雅,但是如果任何方法调用失败,它将停止代码,因为前一个方法调用返回了
null
,如果它为null,它将给您提供一个机会来提供默认值

另一种选择是这样的:

Something v = /*Default Value*/ // Will be overwritten if subsequent methods succeed.
Object temp = a.getB(); // Use whatever Object type getB() returns.
if(temp != null){
    temp = temp.getC(); 
    /* If getC() returns a different type of object, 
     * either use a different variable or make the temp variable even broader 
     * (such as the generic Object type) */
    if(temp != null){
        temp = temp.getD();
        if(temp != null){
            temp = temp.getE();
            if(temp != null)
                v = temp; 
                /* If all previous calls returned something substantial, 
                 * v will be something useful */
            }//if(getE() != null)
        }//if(getD() != null)
    }//if(getC() != null)
}//if(getB() != null)
如果您愿意,您可以通过不嵌套If语句来使用CPU效率稍低但更易于阅读的版本。如果所有If语句都在后面执行,则单个null将阻止所有后续语句执行,尽管每次仍将检查其值


至于生成这些语句,我不是很确定。这实际上取决于您可以提前多少时间从以前的方法调用返回的
对象中预测哪些新方法可用。如果您的目标是自动生成代码,那么我的第一个建议可能会更好:
试试catch

这是一件有趣的事情:)谢谢您的建议,但这不是答案。我需要重构300个不防范null的方法,并在nullpointerException上抛出大量数据。这就是为什么我越快摆脱它越好,这就是为什么我寻找一种自动化的方法来完成它。需要空指针。您确定在自动重构代码后逻辑会正常工作吗?是的,我有一个默认值要分配给表达式。恼人的部分是防止在调用路径中出现NPE。是的,按照您的建议进行尝试捕获,相反:这样做更容易,尽管我不喜欢提出可以通过其他方式控制的异常。我手工完成了所有方法的重构,因为eclipse不提供这种重构的可能性。