Anonieme klassen (Anonymous classes
) zijn natuurlijk geintroduceerd in de theorie van Lambda Expressions. Er is echter een detail dat we niet besproken hebben.
Anonieme klasses worden altijd gedefineerd binnen een andere klasse, dat heet een inner class. Dit geeft ze speciale privileges.
Inner classes hebben toegang tot private fields!
We laten de mogelijkheden zien met deze Runnable
inner klasseā
public class OuterClass {
private int price = 15;
public Runnable getPricePrinter() {
return new InnerClass();
}
public class InnerClass implements Runnable {
@Override
public void run() {
System.out.println(price);
}
}
}
Door getPricePrinter()
aan te roepen ontvang je een simpele implementatie, maar dit is natuurlijk maar het begin.
Het voorbeeld had even makkelijk gewerkt met een anonieme klasse.
Een inner klasse geeft je vooral een mogenlijkheid om een nieuwe subgroep van methoden en data op te slaan. Wanneer deze opdeling helpt in het begrijpen van de code is dat reden genoeg.
Tevens heb je een nieuw ontworpen implementatie die de prive data op een andere manier kan verwerken.
Het grote nadeel blijft dat je blijkbaar zoveel methoden had dat het nodig werd om dingen op te delen vanuit een klasse die misschien wat groot is.
Java biedt een heleboel handige interfaces met verschillende doelen. Om altijd maar een externe bronnen te voorzien van de juiste implemenatie is een inner klasse of een anonieme klasse het beste de verantwoordelijkheid zijn van de klasse zelf.
Iterator
, laat gebruikers over de interne lijst van elementen lopen. (Zie ook Iterable
)Supplier
, biedt ieder element uit jouw lijst in volgorde aan.Het ontwerpen van een instantie met een specieke verantwoordelijkheid voor een variatie van de standaard operaties op jouw interne data staat je toe om dat te groeperen binnen de verantwoordelijkheid van een inner (of anonieme) klasse.
Inner klasses helpen je met het groeperen van methoden en verantwoordelijkheden. Daarnaast helpen de standaard interfaces van Java je met het kiezen van functionaliteit die je via een inner klasse kunt aanbieden.