Deze snelle les in onze Leer Java voor Android-ontwikkeling serie toont u hoe u het type object met behulp van de voorwaardelijke controle kunt controleren instanceof
sleutelwoord in Java.
We hebben het gehad over veel van de standaard Java-conditionele uitspraken in de Leer Java voor Android-ontwikkeling: Java Syntax tutorial. Java biedt bijvoorbeeld alle typische conditionele operatoren die je zou kunnen verwachten, inclusief die om te controleren op gelijkheid, ongelijkheid, groter dan, kleiner dan, enz..
Hier is wat Java-code die de waarde van een numerieke variabele (genaamd iVar) controleert en verschillende codepaden biedt, afhankelijk van of de waarde van iVar nul, negatief of positief is:
if (iVar == 0) // variabele is nul else if (iVar> 0) // variabele is een positief getal else // variabele is een negatief getal
Laten we nu eens kijken naar een specifieke Java-functie die u ook in voorwaardelijke uitspraken kunt gebruiken. Omdat Java een volledig objectgeoriënteerde taal is, kunt u ook testen of een object van een specifiek type is (een exemplaar van een specifieke klasse), conditioneel met behulp van de instanceof
trefwoord. De instanceof
keyword is een Booleaanse operator, gebruikt als een normale wiskundige Booleaanse conditionele operator om een waar of een fout resultaat te genereren.
Laten we een snel voorbeeld bekijken. Laten we aannemen dat we een ouderklasse hebben, genaamd Fish, die twee afgeleide subklassen heeft: SaltwaterFish en FreshwaterFish. We zouden de kunnen gebruiken instanceof
zoekwoord om te testen of een object een instantie van een specifieke klasse (of subklasse) is op naam:
SaltwaterFish nemo = new SaltwaterFish (); if (nemo instanceof Fish) // we hebben een soort van Fish // zou een Fish (ouderklasse) kunnen zijn, of een subklasse van een soort, zoals // SaltwaterFish, of FreshwaterFish. if (nemo instanceof SaltwaterFish) // Nemo is een zeevis!
Dus, als het gaat om Android-ontwikkeling, wanneer is het instanceof
functie nuttig? Nou, om te beginnen zijn de SDK-klassen voor Android georganiseerd op een objectgerichte manier: hiërarchisch. De klassen zoals Button, TextView en CheckBox, die verschillende typen gebruikersinterfacebesturingen vertegenwoordigen, zijn bijvoorbeeld allemaal afgeleid van dezelfde bovenliggende klasse: Weergave. Daarom zou u, als u een methode wilde maken die een parameter View had, maar verschillend gedrag hadden, afhankelijk van het specifieke type besturingselement, instanceof
mechanisme om de inkomende parameter te controleren en precies te bepalen welk type zichtregeling werd doorgegeven.
De volgende methode gebruikt bijvoorbeeld een parameter View, zodat u in elk type weergave kunt slagen, maar met name TextView-besturingselementen voor speciale verwerking uitkiest:
void checkforTextView (View v) if (v instanceof TextView) // Dit is een TextView-besturingselement else // Dit is geen TextView-besturingselement
In dit voorbeeld kunnen we doorgaan met het aanroepen van een methode die alleen geldig is voor een TextView-object en niet voor het generieke View-object. In dat geval zouden we de parameter View waarschijnlijk naar een TextView casten voordat een dergelijke aanroep wordt gedaan. Als we echter een oproep willen doen die beschikbaar is in alle View-objecten, maar zich anders gedraagt in TextView-objecten, hoeft hier niet op te worden getest. Java zal de juiste versie van de methode specifiek voor TextView aanroepen. Dit is een van de geweldige kenmerken van objectgeoriënteerd programmeren: de meest geschikte versie van een bepaalde methode wordt genoemd.
In deze korte les heb je geleerd hoe je de instanceof
Java-sleutelwoord om het type object tijdens runtime te controleren en conditionele codepaden aan te bieden op basis van het resultaat. Dit is een handige Java-functie waar Android-ontwikkelaars vaak op vertrouwen, omdat de Android SDK hiërarchisch is georganiseerd.
Mobiele ontwikkelaars Lauren Darcey en Shane Conder hebben samen meerdere boeken geschreven over Android-ontwikkeling: een diepgaand programmeerboek getiteld Android Wireless Application Development en Sams TeachYourself Android Application Development binnen 24 uur. Wanneer ze niet schrijven, besteden ze hun tijd aan het ontwikkelen van mobiele software bij hun bedrijf en het leveren van consultingservices. Ze zijn te bereiken via e-mail naar [email protected], via hun blog op androidbook.blogspot.com, en op Twitter @androidwireless.