Я думал, существует ли лучший / более хороший способ отрицать instanceof
в Java. На самом деле я делаю что-то вроде:
if(!(str instanceof String)) { /* do Something */ }
Но я думаю, что «красивый» синтаксис для этого должен существовать.
Кто-нибудь знает, существует ли он и как выглядит синтаксис?
РЕДАКТИРОВАТЬ: красивым, я мог бы сказать что-то вроде этого:
if(str !instanceof String) { /* do Something */ } // compilation fails
instanceof
так много ...boolean strIsString = str instanceof String;
...Ответы:
Нет, лучшего способа нет; ваш канонический
источник
Я не знаю, что вы представляете, когда говорите «красиво», но как насчет этого? Лично я думаю, что это хуже, чем классическая форма, которую вы разместили, но кому-то это может понравиться
источник
!= true
вместо== false
: Dif(!(str instanceof String))
это единственный правильный путь, и мне нужно перестать думать об альтернативахВы можете использовать
Class.isInstance
метод:... но это все еще отрицается и довольно некрасиво.
источник
this method returns true if the specified Object argument is an instance of the represented class (or of any of its subclasses)
Обычно вы не хотите просто
if
ноelse
пункт , а также.можно записать как
Или вы можете написать код, чтобы вам не нужно было знать, является ли он строкой или нет. например
можно записать как
источник
Если вы можете использовать статический импорт, и ваш моральный кодекс позволяет им
А потом...
Это просто беглое упражнение по интерфейсу, я бы никогда не использовал его в реальной жизни!
Продолжайте свой классический путь, это не смущает никого, кто читает ваш код!
источник
Если вы находите это более понятным, вы можете сделать что-то подобное с Java 8:
источник
if (Predicate.not(isInstanceOfTheClass).test(myObject)) { ...
. Не лучше, имо, но должно работать!хорошо, только мои два цента, используйте метод строки:
источник
Вы можете сделать это, выполнив следующий способ ... просто добавьте условие, добавив скобку
if(!(condition with instanceOf))
со всем условием, добавив!
оператор в начале, как указано в приведенных ниже фрагментах кода.вместо
источник
Я согласен, что в большинстве случаев
if (!(x instanceof Y)) {...}
это лучший подход, но в некоторых случаях стоит создатьisY(x)
функцию, которая поможет вамif (!isY(x)) {...}
.Я новичок в машинописи, и я сталкивался с этим вопросом S / O несколько раз за последние несколько недель, поэтому для googlers способ машинописи сделать это - создать такую защиту:
typeGuards.ts
Применение
Я предполагаю, что единственная причина, по которой это может быть уместно в машинописном тексте, а не в обычном js, заключается в том, что типографские символы - это общее соглашение, поэтому, если вы пишете их для других интерфейсов, разумно / понятно / естественно написать их также для классов.
Там больше подробно о пользовательских определяемых типах охранников как это в документах
источник