Content deleted Content added
Gyanauce2006 (talk | contribs) →References: Added a Section on Use Cases of Maker Interfaces Tags: Reverted Visual edit |
MichaelMaggs (talk | contribs) Adding short description: "Design pattern in computer science" |
||
(3 intermediate revisions by 3 users not shown) | |||
Line 1:
{{Short description|Design pattern in computer science}}
{{Refimprove|date=June 2013}}
The '''marker interface pattern''' is a [[design pattern (computer science)|design pattern]] in [[computer science]], used with languages that provide run-time type information about objects. It provides a means to associate metadata with a class where the language does not have explicit support for such metadata.
Line 26 ⟶ 27:
</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>.
▲== 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)
Another solution is for the language to support [[metadata]] directly:
Line 48 ⟶ 38:
==References==
{{Reflist}}
== Further reading ==
''Effective Java''<ref>{{Cite book |last=Bloch |first=Joshua
{{Design Patterns patterns}}
|