Wat is het gebruik van markeringsinterfaces in Java?

Als er niets te implementeren is in de markeringsinterfaces zoals SerializableWat heeft het voor zin om het te implementeren?


Antwoord 1, autoriteit 100%

Joshua Bloch: effectieve Java 2e editie, p 179

Item 37: Markeerinterfaces gebruiken om typen te definiëren


Je hoort het misschien zeggen dat marker
annotaties (item 35) make marker
interfaces verouderd. Deze bewering is
niet correct. Marker-interfaces hebben twee
voordelen ten opzichte van markerannotaties.
Eerst en vooral de markeringsinterfaces
definieer een type dat wordt geïmplementeerd door
instanties van de gemarkeerde klasse; markeerstift
annotaties niet. Het bestaan ​​van
met dit type kun je fouten opvangen
tijdens het compileren dat je niet kon
vang tot runtime als je a . hebt gebruikt
markering annotatie….

Persoonlijk denk ik dat ik zal buigen voor Joshua’s superieure kennis over dit onderwerp.


Antwoord 2, autoriteit 69%

In eerdere versies van Java waren Marker Interfacesde enige manier om metadata over een klasse te declareren . Met de Serializable Marker Interface kan de auteur van een klasse bijvoorbeeld zeggen dat hun klasse zich correct zal gedragen wanneer ze worden geserialiseerd en gedeserialiseerd.

In moderne Java hebben markeringsinterfaces geen plaats. Ze kunnen volledig worden vervangen door Annotaties, die zorgen voor een zeer flexibele metadata-mogelijkheid. Als je informatie hebt over een klas en die informatie verandert nooit, dan zijn annotaties een zeer nuttige manier om het weer te geven.


Antwoord 3, autoriteit 5%

Dergelijke markeringsinterfaces zijn handig in het geval dat andere code beslissingen neemt, afhankelijk van of een object een markeringsinterface implementeert.

In het geval van Serializable, wordt reflectie gebruikt om de velden van de objecten te serialiseren.

Annotaties hebben nu de voorkeur omdat ze zich niet verspreiden naar subklassen.

Zie Markerinterfacepatroon.


Antwoord 4, autoriteit 4%

Het geeft aan dat de klasse (en dus alle velden die niet van voorbijgaande aard zijn) kandidaten zijn voor serialisatie. En als u een raamwerk bouwt dat afhankelijk is van serialisatie, kunt u natuurlijk een methode als volgt schrijven:

public void registerObject(Serializable obj);

om de lessen te beperken die je bereid bent te accepteren.

Omdat een geserialiseerd object compatibiliteit tussen systemen moet behouden, is serialisatie een expliciete ontwerpbeslissingen vereist daarom het gebruik van de markeringsinterface om dergelijke kandidaten te identificeren.

Er is ook een veiligheidsaspect. Je wilt niet alles serialiseerbaar maken – anders kun je per ongeluk (bijvoorbeeld) wachtwoorden of andere gevoelige gegevens vrijgeven via serialisatie.


Antwoord 5, autoriteit 4%

Ze worden marker-interfaces genoemd. En zoals de naam al aangeeft, markerenze dat een object beschikbaar is voor bepaalde soorten bewerkingen.

Serializablebetekent dat het object bijvoorbeeld in aanmerking komt voor java-serialisatie.

Er is besproken of ze niet moeten worden vervangen door annotaties, aangezien hun functies vrij gelijkaardig zijn.


Antwoord 6, autoriteit 3%

Als u een interface implementeert, is instanceofwaar. Als je interface niets te implementeren heeft, kun je dit gebruiken om een ​​klasse te markeren met metadata zoals annotaties doen voor Java 1.5 en hoger zonder dat je de implementor hoeft te dwingen iets speciaals te doen.


Antwoord 7

Je hebt gelijk als je redeneert dat een lege interface geen invloed heeft op de “standaard” uitvoering van het programma dat gebaseerd is op inspectie/mutatie van velden en verzending van methoden.

De markeringsinterface is echter handig wanneer deze wordt gebruikt in combinatie met reflectie: een bibliotheek/methode inspecteert (via reflectie) een object en werkt anders als zijn klasse de markeringsinterface implementeert. Vanaf Java5 is er heel weinig behoefte aan markeringsinterfaces – dezelfde “markerings”-faciliteit kan worden bereikt via Java-annotaties – waarvan (wederom) het grootste deel van hun effect zal worden bereikt via op reflectie gebaseerde code.


Antwoord 8

Het belangrijkste doel is om de compiler te vertellen dat het object van de klasse die de markeringsinterface heeft geïmplementeerd anders moet worden behandeld.


Antwoord 9

Zorgvuldig kijken naar de markeringsinterface in Java, b.v. Serializable, Clonnable en Remote het lijkt erop dat ze worden gebruikt om iets aan de compiler of JVM aan te geven. Dus als JVM ziet dat een klasse serializeerbaar is, heeft het er een speciale bewerking op uitgevoerd, op dezelfde manier als JVM ziet dat één klasse Clonnable is geïmplementeerd, voert het een bewerking uit om klonen te ondersteunen. Hetzelfde geldt voor RMI en externe interface. Dus in het kort Marker-interface aangeven, signaal of een commando naar Compiler of JVM.

Lees meer: ​​http ://javarevisited.blogspot.com/2012/01/what-is-marker-interfaces-in-java-and.html#ixzz2v6fIh1rw

Other episodes