Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在业务逻辑中是否建议进行不必要的错误处理?例如,空检查/百分比限制检查等_Java_Error Handling_Error Checking - Fatal编程技术网

Java 在业务逻辑中是否建议进行不必要的错误处理?例如,空检查/百分比限制检查等

Java 在业务逻辑中是否建议进行不必要的错误处理?例如,空检查/百分比限制检查等,java,error-handling,error-checking,Java,Error Handling,Error Checking,我们通常在业务逻辑中进行不必要的检查以避免失败 例如 如果我们确信它永远不会为空,为什么我们需要这个空检查? 这是不是一个好的做法 2. int pplReached = funA(..,..,..); int totalPpl = funB(..,..,..); funA() just puts a few more restriction over result of funB(). Double percentage = (totalPpl==0||total

我们通常在业务逻辑中进行不必要的检查以避免失败

例如

如果我们确信它永远不会为空,为什么我们需要这个空检查? 这是不是一个好的做法

2. int pplReached = funA(..,..,..);
   int totalPpl   = funB(..,..,..);

   funA() just puts a few more restriction over result of funB().


    Double percentage = (totalPpl==0||totalPpl<pplReached) ? 0.0 : pplReached/totalPpl;
2。int pplReached=funA(…,…);
int TOTALLPPL=funB(…,…);
funA()只是对funB()的结果增加了一些限制。

双倍百分比=(totalPpl==0 | | totalPpl想想你的观众。当他们

  • 帮助程序员检测错误
  • 帮助其他程序员在其代码与您的代码一致时检测错误
  • 允许程序从错误输入或无效状态恢复,或
  • 帮助维护人员避免以后引入错误
  • 如果上面的
    null
    检查不属于这些范围,或者有一个更简单的机制可以做到这一点,那么请将其忽略

    更简单的机制通常包括:

  • 单元测试
  • 向读者传达意图的注释,可通过或类似工具进行检查
  • assert
    s导致代码早期失败,并传达意图,而无需您输入错误处理代码,这些代码永远不会到达,也不会混淆代码覆盖工具
  • 文档或内联注释
  • 在本例中,我建议添加一个注释

    public @Nonnull ObjectABC funcABC(){
    
    将findbugs集成到构建过程中,并可能替换

    if(o!=null){
    //do something
    }
    

    我们通过设置这样的检查,不是在吞咽一些基本问题吗

    根据经验

  • 单元测试有助于检查一小段代码的行为。如果你不能为重要的函数编写单元测试,那么根本的问题是你不能
  • 注释有助于向代码审阅者、维护者和自动化工具传达意图。如果您没有将这些工具集成到流程中,那么根本的问题是您没有利用可用的代码质量工具
  • assert
    s有助于仔细检查您的假设。如果您无法在代码中添加断言并快速判断哪些断言被违反,那么您的根本问题是您没有一种快速的方法来针对代表性数据运行代码以解决问题
  • 文档和内联注释(包括源代码管理注释)有助于在团队中传播有关系统的知识——确保团队中不止一个人可以修复代码任何部分中的问题。如果他们经常丢失或不同步,那么潜在的问题是您在编写代码时没有考虑到维护人员

  • 最后,是一种编程方法,许多人发现它对业务逻辑代码很有用。即使您无法说服您的团队采用特定的工具和实践,阅读DbC仍然可以帮助您推理并解释如何在代码库中实施重要的不变量。

    您在这里做什么:
    如果(o!=null){//do something}其他的{
    ?我更喜欢一直添加检查,因为这意味着如果我搞糟了一些应该是正确的事情——如果我无意中传递了null,那么它会立即快速失败,所以我会很快注意到。不管怎样。假设我们访问对象o的一个成员并进行一些处理。然后呢?Mike Samuel很好地解释了这一点,所以只是一个sh请允许我回答您的具体情况:空检查似乎没有帮助,尽管很难说有这么小的代码片段。但是,重要的是要考虑如果o实际为空会发生什么。不执行do something而没有人知道这一点可以吗?对于第二个示例:totalPpl==0 make的检查这对我来说很有道理totalPpl@novice_at_work-@assylias在问如果
    o
    null
    ,你该怎么处理这个错误?如果你所做的只是抛出一个异常,为什么不让
    NullPointerException
    作为is?
    if(o!=null){
    //do something
    }
    
    assert o != null: "funcABC() should have allocated a new instance or failed."