Eu estava pensando se existe uma maneira melhor / mais agradável de negar um instanceof
em Java. Na verdade, estou fazendo algo como:
if(!(str instanceof String)) { /* do Something */ }
Mas acho que deveria existir uma sintaxe "bonita" para fazer isso.
Alguém sabe se existe e como é a sintaxe?
EDIT: Por bonito, eu poderia dizer algo como isto:
if(str !instanceof String) { /* do Something */ } // compilation fails
instanceof
tanto ...boolean strIsString = str instanceof String;
...Respostas:
Não, não há melhor caminho; o seu é canônico.
fonte
Não sei o que você imagina quando diz "bonito", mas e quanto a isso? Pessoalmente, acho que é pior do que o formulário clássico que você postou, mas alguém pode gostar ...
fonte
!= true
vez de== false
: Dif(!(str instanceof String))
é a única maneira certa, e eu preciso parar de alternativas de pensamentoVocê pode usar o
Class.isInstance
método:... mas ainda é negado e muito feio.
fonte
this method returns true if the specified Object argument is an instance of the represented class (or of any of its subclasses)
Normalmente você não quer apenas
if
umaelse
cláusula, mas também.pode ser escrito como
Ou você pode escrever o código para não precisar saber se é uma String ou não. por exemplo
pode ser escrito como
fonte
Se você pode usar importações estáticas e seu código moral permitir
E depois...
Este é apenas um exercício de interface fluente, eu nunca usaria isso no código da vida real!
Siga seu jeito clássico, não confundirá mais ninguém lendo seu código!
fonte
Se você achar mais compreensível, poderá fazer algo assim com o Java 8:
fonte
if (Predicate.not(isInstanceOfTheClass).test(myObject)) { ...
. Não é melhor, imo, mas deve funcionar!ok apenas meus dois centavos, use um método é string:
fonte
Você pode conseguir fazendo o procedimento abaixo: basta adicionar uma condição adicionando colchete
if(!(condition with instanceOf))
com toda a condição, adicionando o!
operador no início da maneira mencionada nos trechos de código abaixo.ao invés de
fonte
Concordo que, na maioria dos casos,
if (!(x instanceof Y)) {...}
é a melhor abordagem, mas, em alguns casos, cria umaisY(x)
função para que você possaif (!isY(x)) {...}
valer a pena.Sou iniciante em datilografia, e me deparei com essa questão de S / O várias vezes nas últimas semanas; portanto, para os googlers, a maneira datilografada de fazer isso é criar uma proteção de tipo como esta:
typeGuards.ts
uso
Eu acho que a única razão pela qual isso pode ser apropriado no texto datilografado e não no js comum é que as proteções tipográficas são uma convenção comum; portanto, se você as escreve para outras interfaces, é razoável / compreensível / natural escrevê-las também para as aulas.
Há mais detalhes sobre proteções de tipo definidas pelo usuário nos documentos
fonte