Estaba pensando si existe una manera mejor / mejor de negar un instanceof
en Java. En realidad, estoy haciendo algo como:
if(!(str instanceof String)) { /* do Something */ }
Pero creo que debería existir una sintaxis "hermosa" para hacer esto.
¿Alguien sabe si existe y cómo se ve la sintaxis?
EDITAR: Por hermosa, podría decir algo como esto:
if(str !instanceof String) { /* do Something */ } // compilation fails
instanceof
tanto ...boolean strIsString = str instanceof String;
...Respuestas:
No, no hay mejor manera; El tuyo es canónico.
fuente
No sé qué imaginas cuando dices "hermoso", pero ¿qué pasa con esto? Personalmente, creo que es peor que el formulario clásico que publicaste, pero a alguien podría gustarle ...
fuente
!= true
lugar de== false
: Dif(!(str instanceof String))
es la única forma correcta, y necesito dejar de pensar en alternativasPodrías usar el
Class.isInstance
método:... pero todavía está negado y es bastante feo.
fuente
this method returns true if the specified Object argument is an instance of the represented class (or of any of its subclasses)
Por lo general, no solo quieres
if
unaelse
cláusula sino también una .Se puede escribir como
O puede escribir el código para que no necesite saber si es una Cadena o no. p.ej
Se puede escribir como
fuente
Si puede usar importaciones estáticas, y su código moral les permite
Y entonces...
Este es solo un ejercicio de interfaz fluido, ¡nunca lo usaría en el código de la vida real!
Vaya por su camino clásico, ¡no confundirá a nadie más que lea su código!
fuente
Si lo encuentra más comprensible, puede hacer algo como esto con Java 8:
fuente
if (Predicate.not(isInstanceOfTheClass).test(myObject)) { ...
. No mejor, OMI, pero debería funcionar!ok solo mis dos centavos, use un método is string:
fuente
Puede lograrlo haciendo lo siguiente: solo agregue una condición agregando un corchete
if(!(condition with instanceOf))
con toda la condición agregando el!
operador al inicio de la manera mencionada en los fragmentos de código a continuación.en vez de
fuente
Estoy de acuerdo en que, en la mayoría de los casos, este
if (!(x instanceof Y)) {...}
es el mejor enfoque, pero en algunos casos crear unisY(x)
función para que puedaif (!isY(x)) {...}
vale la pena .Soy un novato en mecanografía, y me he topado con esta pregunta de S / O varias veces en las últimas semanas, por lo que para los googlers, la forma de mecanografiar esto es crear una protección de letra como esta:
typeGuards.ts
uso
Supongo que la única razón por la que esto podría ser apropiado en mecanografiado y no js regular es que los protectores de tipografía son una convención común, por lo que si los escribe para otras interfaces, es razonable / comprensible / natural escribirlos también para las clases.
Hay más detalles sobre los protectores de tipo definidos por el usuario como este en los documentos
fuente