Video: Android 101 by Fred Widjaja 2024
Ett av de ursprungliga designmålen för Java var att hålla språket så enkelt som möjligt. Språkets utvecklare tog några onödigt komplicerade funktioner på C ++ och slängde dem ut genom fönstret. Resultatet var ett språk som var elegant och elegant. Vissa människor sa att språket var för snyggt.
Så efter flera års diskussion och skabbning blev Java lite mer komplicerad. Vid år 2004 hade Java enumtyper, förbättrade för loopar, statisk import och några andra intressanta nya funktioner. Men den mest pratade nya funktionen var introduktionen av generika.
ArrayList people = new ArrayList ();
Användningen av något liknande var nytt i Java 5. 0. I gammaldags Java skulle du skriva
ArrayList people = new ArrayList ();
På den tiden kunde en ArrayList lagra nästan vad som helst som du ville lägga i det - ett nummer, ett konto, ett rum, en sträng … någonting. ArrayList-klassen var mycket mångsidig, men med denna mångsidighet kom några huvudvärk. Om du kunde lägga in något i en ArrayList, kunde du inte enkelt förutsäga vad du skulle komma ifrån en ArrayList.
I synnerhet kunde du inte enkelt skriva kod som antog att du hade lagrat vissa typer av värden i ArrayList. Här är ett exempel:
ArrayList saker = ny ArrayList (); saker. lägg till (nytt konto ()); Konto myAccount = saker. få (0); // ANVÄND INTE DETTA. Det är dåligt kod.
I den tredje raden tar samtalet för att få (0) det tidigaste värdet i samlingen av saker. Samtalet att få (0) är okej, men då samlar kompakten på försöket till minAccount. Du får ett meddelande på den tredje raden som säger att allt du får från listan med saker kan inte fyllas i variabeln myAccount.
Du får det här meddelandet, eftersom den gången kompilatorn når den tredje raden, har den glömt att objektet som lagts till på den andra raden var av typen Konto!
Introduktionen av generiker fixar detta problem:
ArrayList things = new ArrayList (); saker. lägg till (nytt konto ()); Konto myAccount = saker. få (0); // ANVÄND DENNA KOD INSTEAD. Det är bra kod.
Lägger till på två ställen berättar kompilatorn om att saker lagrar kontoinstanser - inget annat. Så, i den tredje raden i föregående kod får du ett värde från samlingen. Då eftersom saker endast lagrar kontoobjekt kan du göra minAccount referera till det nya värdet.
Java 5. 0 tillagda generiker till Java. Men strax efter födelsen av Java 5. 0 såg programmerare hur klumpigt generalkoden kan vara.När allt kommer omkring kan du skapa generics inom generics. En ArrayList kan innehålla en massa arrays, som alla kan vara en ArrayList. Så du kan skriva
ArrayListmess = ny ArrayList ();
All upprepning i den där röradeklarationen ger programmerare huvudvärk! För att undvika denna fulhet har Java 7 och senare versioner en diamantoperatör , . Diamantoperatören berättar för Java att återanvända vad som helst sämre komplicerade saker du lägger i den föregående delen av den generiska deklarationen.
I det här exemplet berättar Java om att återanvända
ArrayListmess = ny ArrayList ();
I Java 7 och senare kan du skriva en av de här röradeklarationerna - den ursprungliga, otäcka deklarationen med två händelser av ArrayList [], eller den rättade (endast mildt otäcka) deklarationen med diamantoperatören och endast en ArrayList [] förekomst.
Ja, den strömlinjeformade koden är fortfarande komplicerad. Men utan alla ArrayList [] upprepning är den strömlinjeformade koden mindre besvärlig. Java 7-diamantoperatören tar bort en chans att du kopierar något felaktigt och har ett stort fel i din kod.