Como resolver ‘Definir e lançar uma exceção dedicada em vez de usar uma genérica’.

Eu preciso throw RuntimeException quando o comprimento de duas listas não é igual. Estamos usando a ferramenta SonarQube para fins de revisão de código.

Aqui está o código:

 if (objctArray.length != columnArray.length) { throw new RuntimeException(String.format("objctArray and columnArray length is not same. objctArray length = %d, columnArray length = %d", objctArray.length, columnArray.length)); } 

Agora, o SonarQube levanta um problema que Define and throw a dedicated exception instead of using a generic one. throw new RuntimeException line. Eu não sei qual exceção eu posso replace para resolver o problema do SonarQube .

Se essas duas listas forem argumentos passados ​​para um método, IllegalArgumentException seria um bom candidato para lançar. É uma subclass de RuntimeException , então você ainda estará lançando um tipo de RuntimeException .

 if (objctArray.length != columnArray.length) { throw new IllegalArgumentException(String.format("objctArray and columnArray length is not same. objctArray length = %d, columnArray length = %d", objctArray.length, columnArray.length)); } 

Não jogue exceções genéricas . Você deve estar subclassificando Exception e, em seguida, lançando sua subclass, para que o tipo de exceção realmente forneça informações sobre o que está acontecendo, permitindo que os clientes da function o capturem e tratem apropriadamente.