Ich dachte, ob es einen besseren / schöneren Weg gibt, einen instanceof
in Java zu negieren . Eigentlich mache ich so etwas wie:
if(!(str instanceof String)) { /* do Something */ }
Aber ich denke, dass eine "schöne" Syntax dafür existieren sollte.
Weiß jemand, ob es existiert und wie die Syntax aussieht?
EDIT: Mit schön könnte ich so etwas sagen:
if(str !instanceof String) { /* do Something */ } // compilation fails
instanceof
so viel ...boolean strIsString = str instanceof String;
...Antworten:
Nein, es gibt keinen besseren Weg. deins ist kanonisch.
quelle
Ich weiß nicht, was Sie sich vorstellen, wenn Sie "schön" sagen, aber was ist damit? Ich persönlich denke, es ist schlimmer als das klassische Formular, das Sie gepostet haben, aber es könnte jemandem gefallen ...
quelle
!= true
anstelle von== false
: Dif(!(str instanceof String))
der einzig richtige Weg ist, und ich muss aufhören, über Alternativen nachzudenkenSie könnten die
Class.isInstance
Methode verwenden:... aber es ist immer noch negiert und ziemlich hässlich.
quelle
this method returns true if the specified Object argument is an instance of the represented class (or of any of its subclasses)
Normalerweise möchten Sie nicht nur eine,
if
sondern auch eineelse
Klausel.kann geschrieben werden als
Oder Sie können den Code schreiben, damit Sie nicht wissen müssen, ob es sich um einen String handelt oder nicht. z.B
kann geschrieben werden als
quelle
Wenn Sie statische Importe verwenden können und Ihr Moralkodex dies zulässt
Und dann...
Dies ist nur eine fließende Interface-Übung, die ich im realen Code niemals verwenden würde!
Gehen Sie Ihren klassischen Weg, es wird niemanden verwirren, der Ihren Code liest!
quelle
Wenn Sie es verständlicher finden, können Sie mit Java 8 Folgendes tun:
quelle
if (Predicate.not(isInstanceOfTheClass).test(myObject)) { ...
. Nicht besser, imo, sollte aber funktionieren!ok nur meine zwei Cent, benutze eine is string Methode:
quelle
Sie können dies erreichen, indem Sie die folgenden Schritte ausführen. Fügen Sie einfach eine Bedingung hinzu, indem Sie eine Klammer
if(!(condition with instanceOf))
mit der gesamten Bedingung hinzufügen, indem Sie!
am Anfang den Operator hinzufügen, wie in den folgenden Codeausschnitten beschrieben.anstatt
quelle
Ich bin damit einverstanden, dass dies in den meisten Fällen der
if (!(x instanceof Y)) {...}
beste Ansatz ist, aber in einigen Fällen lohnt es sich , eineisY(x)
Funktion zu erstellen , damit Sie dies könnenif (!isY(x)) {...}
.Ich bin ein Typoskript-Neuling und bin in den letzten Wochen einige Male auf diese S / O-Frage gestoßen. Für die Googler besteht die Typoskript-Methode darin, einen Typeguard wie den folgenden zu erstellen:
typeGuards.ts
Verwendungszweck
Ich denke, der einzige Grund, warum dies in Typoskript und nicht in regulärem js angemessen sein könnte, ist, dass Typeguards eine gängige Konvention sind. Wenn Sie sie also für andere Schnittstellen schreiben, ist es vernünftig / verständlich / natürlich, sie auch für Klassen zu schreiben.
Weitere Informationen zu benutzerdefinierten Typschutzvorrichtungen wie diesen finden Sie in den Dokumenten
quelle