Content deleted Content added
Precise the meaning of a marker interface |
MichaelMaggs (talk | contribs) Adding short description: "Design pattern in computer science" |
||
(9 intermediate revisions by 6 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 6 ⟶ 7:
| last = Bloch
| first = Joshua
| title = Effective Java
| page = [https://archive.org/details/effectivejava00bloc_0/page/179 179]
| chapter = Item 37: Use marker interfaces to define types
Line 14 ⟶ 15:
| chapter-url-access = registration
| chapter-url = https://archive.org/details/effectivejava00bloc_0/page/179
| edition = Second
}}</ref> (also called '''tagging interface''') which is an empty interface,<ref>{{Cite web |date=2017-03-06 |title=Marker interface in Java |url=https://www.geeksforgeeks.org/marker-interface-java/ |access-date=2022-05-01 |website=GeeksforGeeks |language=en-us}}</ref>
== Example ==
An example of the application of marker interfaces from the [[Java (programming language)|Java programming language]] is the {{Javadoc:SE|java/io|Serializable}} interface. 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>.▼
An example of the application of marker interfaces from the [[Java (programming language)|Java programming language]] is the {{Javadoc:SE|java/io|Serializable}} interface:<syntaxhighlight lang="java">
package java.io;
public interface Serializable {
}
▲
==Critique==
Another solution is for the language to support [[metadata]] directly:
Line 27 ⟶ 36:
==See also==
*[[Design marker]]s for an expansion of this pattern.
==References==
{{Reflist}}
== Further reading ==
''Effective Java''<ref>{{Cite book |last=Bloch |first=Joshua |title=Effective Java |date=2018 |isbn=978-0-13-468599-1 |edition=Third |___location=Boston |oclc=1018432176}}</ref> by [[Joshua Bloch]].
{{Design Patterns patterns}}
|