0
votes

Les blocs exécutés conditionnellement doivent être accessibles

Les opérateurs ternaires de Sonar se plaignent ne doivent pas être imbriqués.
Est-il possible de supprimer cette plainte depuis que je suis débutant à Java, je voudrais une aide dans ce numéro.

object form = null;
if(objs.getForm() != null)
form = objs.getForm();
String getName = form != null
                     ? referenceObjType + form.getName()
                     : "" + (objs.getType() == null ? "" 
                     : "(" //$NON-NLS-1$
                     + objs.Type().getTypeName() + ")" 
                     + objs.getName());


4 commentaires

Vous pouvez rechercher la description des règles de sonar. Par exemple, ici: Jira.sonarsource.com/browse/rspec-2583 La déclaration indique que le bloc "sinon" de votre expression ne peut jamais être atteint. Donc, la forme ne peut jamais être nulle ou vous appelez un formulaire. avant la déclaration donnée.


@Tomstroemer alors quelle sera l'approche? Pouvez-vous s'il vous plaît fournir un échantillon


Si votre formulaire ne peut pas être null, vous ne pouvez qu'utiliser string getname = référenceObjtype + form.getname () . Pour plus d'informations, vous devez montrer plus de code. D'où vient la variable de forme? L'accédez-vous avant le code que vous avez montré?


@Tomstroemer Oui, je fais une variable de formulaire d'accès avant cette condition. J'ai édité le code.Veuillez trouver ci-dessus


3 Réponses :


0
votes

Vous devez utiliser des parenthèses pour regrouper le deuxième opérateur ternaire:

"" + objs.getType() == null


2 commentaires

Après avoir utilisé la parenthèse, je reçois des opérateurs ternaires ne doit pas être imbriqué (calmar: S3358) se plaindre @Oh God Spiders


C'est probablement parce que vous pouvez probablement voir à partir de vos propres opérateurs ternaires imbriqués, ne sont pas vraiment parfaits pour la production de code lisible. Vous devriez penser à simplement réécrire le code complètement et à utiliser un StringBuilder et des blocs normaux si-ase-là. Mais si vous voulez continuer à utiliser des opérateurs ternaires imbriqués, voir: Les opérateurs ternaires ne doivent pas être imbriqués (Squid: S3358) être configuré



0
votes

Si vous êtes un débutant avec Java, je m'abstiendrais d'utiliser des opérateurs ternaires afin que vous puissiez vraiment comprendre ce que chaque énoncé fait.

Le problème: Je crois que les déclarations d'autre (ceux commençant par ":") ne sont pas accessibles car la forme ne sera jamais nulle. Aussi, vous aimez une chaîne avant de vérifier si elle est null. Cela reviendra toujours que ce n'est pas null. Vous devez également regrouper votre deuxième opérateur ternaire avec des parenthèses comme: xxx

Il est difficile de vous donner une réponse complète depuis que je ne connais pas votre problème d'origine et je ne peux pas voir autre code mais j'espère que cela aide


0 commentaires

0
votes

Qu'en est-il de quelque chose comme ça? Les opérateurs ternaires imbriqués sont assez mauvaises. xxx


0 commentaires