Java 的 SonarQube:确保在此处安全使用命令行参数

SonarQube for Java: Make sure that command line arguments are used safely here

Java 的 SonarQube 抱怨:“确保在此处安全使用命令行参数”以下代码:

public class Test {

    public static void main(String[] args) {
        try {
            System.out.print(returnSum(args));
        } catch (NumberFormatException nfe) {
            System.out.println("main: Input argument should be a number");
        }
    }

    public static int returnSum(String[] args) {
        int sum = 0;

        if (args.length > 0) {
            try {
                for (String arg : args)
                    sum += Integer.parseInt(arg);
            } catch (NumberFormatException nfe) {
                System.out.println("returnSum: Input argument should be a number");
                throw nfe;
            }
        }

        return sum;
    }
}

为了满足 SonarQube 的要求,我还缺少什么?

这似乎是 sonarqube being overly zealous 的情况。它不希望您按原样将命令行参数数组传递给另一个方法。相反,它认为您应该在 main 方法中清理它们。

一种方法是在 main 方法中将字符串转换为整数,然后使用生成的数字数组是“安全的”:

            int[] numbers = new int[args.length];
            for (int i = 0; i < args.length; i++) {
                numbers[i] = Integer.parseInt(args[i]);
            }

            System.out.print(returnSum(numbers));