【问题标题】:PMD errors unable to resolve in java using eclipse使用 eclipse 在 java 中无法解决 PMD 错误
【发布时间】:2020-02-26 12:00:04
【问题描述】:

我在 Eclipse 中创建了一个下面的 java 服务,并使用 PMD 插件查看了代码,但出现以下错误

** 错误 **

DataflowAnomalyAnalysis: Found 'DD'-anomaly for variable 'result' (lines '80'-'83').
SignatureDeclareThrowsException: A method/constructor should not explicitly throw java.lang.Exception

java 服务

@GetMapping("OCR/GetBarcodeRead")
    @ApiOperation("Get result from Barcode Zxing library")
    public String getBarcodeRead() throws Exception {

        String result = new String();

        try {
            result = service.zxing();
        } catch (Exception e) {
            System.out.println(e);
            result = "";

        }

        return result;

    }

有人可以帮我解决这个问题吗?提前致谢

【问题讨论】:

  • 1) 去掉= new String(),没必要。此外,您永远不需要调用那个特定的构造函数。 --- 2) 删除throws Exception,因为您的代码实际上并没有抛出其中之一。
  • 您可以在 PMD 的参考资料中找到有关它的解释。例如pmd.github.io/latest/…pmd.github.io/latest/…。如果您寻求解决此警告的建议,我推荐 sonarlint 插件 sonarlint.org,它为这些情况提供合规的解决方案。

标签: java eclipse spring-boot exception pmd


【解决方案1】:

你的方法声明你抛出Exception,但你不是,所以删除它

public String getBarcodeRead() {

同时删除new String()并用""初始化它

String result = "";

【讨论】:

  • 这里不需要初始化,所以应该是String result;,而不是String result = "";(或者更好,直接返回值,不存储在变量中)。
  • @howlger if you want 1 return statement 我认为最好删除分配result = "";
  • 没有人想要更难阅读且性能更低的代码。
  • @howlger 恕我直言,使用默认值初始化结果变量并不难阅读
  • 在 Java 中,这是一种糟糕的风格,与品味无关。人们做这种混淆是因为他们从其他编程语言中习惯了它,或者因为他们从其他人那里学到了它。删除result = ""; 行会使情况变得更糟。想想如果在 try 块的末尾添加行 result += service.zxingSuffix(); 会发生什么。
猜你喜欢
  • 1970-01-01
  • 2015-01-23
  • 1970-01-01
  • 1970-01-01
  • 2016-11-08
  • 1970-01-01
  • 2021-04-16
  • 1970-01-01
  • 2012-10-27
相关资源
最近更新 更多