Marker interface pattern: Difference between revisions

Content deleted Content added
Citation bot (talk | contribs)
Alter: title. Add: edition. | Use this bot. Report bugs. | Suggested by Whoop whoop pull up | #UCB_webform 172/1169
References: Added a Section on Use Cases of Maker Interfaces
Tags: Reverted Visual edit
Line 26:
</syntaxhighlight>A class implements this interface to indicate that its non-[[Transient (computer programming)|transient]] data members can be written to an {{Javadoc:SE|java/io|ObjectOutputStream}}. The <code>ObjectOutputStream</code> private method <code>writeObject0(Object,boolean)</code> contains a series of <code>instanceof</code> tests to determine writeability, one of which looks for the <code>Serializable</code> interface. If any of these tests fails, the method throws a <code>NotSerializableException</code>.
 
== Use Cases of Maker Interfaces ==
==Critique==
Some of the use cases of marker interfaces are mentioned below:
 
* '''Categorization and Identification''': Grouping classes based on characteristics (e.g., Serializable, Cloneable).
* '''Runtime Type Checking''': Checking if an object belongs to a specific category.
* '''Enabling Additional Functionality:''' Signaling eligibility for specific operations or enhancements.
* '''Integration with Frameworks and Libraries:''' Identifying and handling specific types of objects.
* '''Documentation and Contracts:''' Communicating expected behavior or capabilities.
* '''Compatibility and Extensibility:''' Designing classes to adapt to future features.
* '''Conditional Behavior or Logic:''' Enabling specific actions based on marker interface presence.
 
== Critique ==
A major problem with marker interfaces is that an interface defines a contract for implementing classes, and that contract is inherited by all subclasses. This means that you cannot "unimplement" a marker. In the example given, if you create a subclass that you do not want to serialize (perhaps because it depends on transient state), you must resort to explicitly throwing <code>NotSerializableException</code> (per <code>ObjectOutputStream</code> docs)
 
Line 37 ⟶ 48:
 
==References==
{{Reflist}}<ref>{{Cite web |title=Marker interface in Java: Valuable Insights |url=https://javagyansite.com/2020/04/25/marker-interface-in-java/ |url-status=live |website=javagyansite}}</ref>
{{Reflist}}
 
== Further reading ==