Je pensais s'il existe une meilleure / plus belle façon de nier un instanceof
en Java. En fait, je fais quelque chose comme:
if(!(str instanceof String)) { /* do Something */ }
Mais je pense qu'une "belle" syntaxe pour ce faire devrait exister.
Est-ce que quelqu'un sait si elle existe et à quoi ressemble la syntaxe?
EDIT: Par belle, je pourrais dire quelque chose comme ceci:
if(str !instanceof String) { /* do Something */ } // compilation fails
instanceof
tant de choses ...boolean strIsString = str instanceof String;
...Réponses:
Non, il n'y a pas de meilleur moyen; le vôtre est canonique.
la source
Je ne sais pas ce que tu imagines quand tu dis "beau", mais qu'en est-il? Personnellement, je pense que c'est pire que le formulaire classique que vous avez publié, mais quelqu'un pourrait l'aimer ...
la source
!= true
place de== false
: Dif(!(str instanceof String))
c'est la seule bonne façon, et je dois arrêter de penser à des alternativesVous pouvez utiliser la
Class.isInstance
méthode:... mais c'est toujours nié et assez moche.
la source
this method returns true if the specified Object argument is an instance of the represented class (or of any of its subclasses)
Habituellement, vous ne voulez pas seulement
if
uneelse
clause, mais aussi une clause.peut être écrit comme
Ou vous pouvez écrire le code afin que vous n'ayez pas besoin de savoir s'il s'agit d'une chaîne ou non. par exemple
peut être écrit comme
la source
Si vous pouvez utiliser des importations statiques et que votre code moral les autorise
Et alors...
Ceci est juste un exercice d'interface fluide, je ne l'utiliserais jamais dans le code de la vie réelle!
Optez pour votre méthode classique, cela ne gênera personne d'autre à lire votre code!
la source
Si vous le trouvez plus compréhensible, vous pouvez faire quelque chose comme ça avec Java 8:
la source
if (Predicate.not(isInstanceOfTheClass).test(myObject)) { ...
. Pas mieux, imo, mais ça devrait marcher!ok juste mes deux cents, utilisez une méthode de chaîne is:
la source
Vous pouvez le faire en faisant ci-dessous .. ajoutez simplement une condition en ajoutant un crochet
if(!(condition with instanceOf))
avec la condition entière en ajoutant l'!
opérateur au début juste comme mentionné dans les extraits de code ci-dessous.au lieu de
la source
Je suis d'accord que dans la plupart des cas,
if (!(x instanceof Y)) {...}
c'est la meilleure approche, mais dans certains cas, créer uneisY(x)
fonction pour que vous puissiez enif (!isY(x)) {...}
valoir la peine.Je suis un novice en dactylographie, et j'ai rencontré cette question S / O plusieurs fois au cours des dernières semaines, donc pour les googleurs, la façon de dactylographier de le faire est de créer un typeguard comme celui-ci:
typeGuards.ts
usage
Je suppose que la seule raison pour laquelle cela pourrait être approprié en dactylographié et non en js normal est que les garde-types sont une convention courante, donc si vous les écrivez pour d'autres interfaces, il est raisonnable / compréhensible / naturel de les écrire pour les classes aussi.
Il y a plus de détails sur les protecteurs de type définis par l'utilisateur comme celui-ci dans la documentation
la source