In other words, an empty interface is known as marker interface or tag interface. It delivers the run-time type information about an object. It is the reason that the JVM and compiler have additional information about an object. The Serializable and Cloneable interfaces are the example of marker interface.
It has three types: Serializable interface. Cloneable interface. Remote interface.
It is also known as a tagging interface and is used to indicate or inform the JVM that a class implementing this interface will have some special behaviour. An efficient way to classify code can be achieved using the marker interface. Examples of such an interface are: Serializable, Cloneable and Remote Interface.
A marker interface is an interface declaring no methods, a functional interface is one with only one abstract method.
writeObject(Serializable)
so that there is a compile-time type checking - This lets you avoid polluting your code with the name of the marker interface when a "plain Object
" is needed. For example, if you make a class that needs to be serializable, and has object members, you would be forced to either do casting or make your objects Serializable
at compile time. This is inconvenient, because the interface is devoid of any functionality.It is not possible to enforce Serializable
on writeObject
because children of non-serializable class can be serializable, but their instances may be upcasted back to the parent class. As a result, holding a reference to something non-serializable (like Object
) does not mean that the referred instance cannot be really serialized. For instance in
Object x = "abc";
if (x instanceof Serializable) {
}
the parent class (Object
) is not serializable and would be initialised using its parameter-less constructor. The value referenced by x
, String
, is serializable and the conditional statement would run.
I have made a simple demonstration to resolve doubt no 1 and 2 :
We will be having Movable interface which will be implemented by MobilePhone.java
Class and one more class LandlinePhone.java
which do NOT implement Movable interface
Our marker Interface:
package com;
public interface Movable {
}
LandLinePhone.java
and MobilePhone.java
package com;
class LandLinePhone {
// more code here
}
class MobilePhone implements Movable {
// more code here
}
Our Custom Exception Class : package com;
public class NotMovableException extends Exception {
private static final long serialVersionUID = 1L;
@Override
public String getMessage() {
return "this object is not movable";
}
// more code here
}
Our Test class : TestMArkerInterface.java
package com;
public class TestMarkerInterface {
public static void main(String[] args) throws NotMovableException {
MobilePhone mobilePhone = new MobilePhone();
LandLinePhone landLinePhone = new LandLinePhone();
TestMarkerInterface.goTravel(mobilePhone);
TestMarkerInterface.goTravel(landLinePhone);
}
public static void goTravel(Object o) throws NotMovableException {
if (!(o instanceof Movable)) {
System.out.println("you cannot use :" + o.getClass().getName() + " while travelling");
throw new NotMovableException();
}
System.out.println("you can use :" + o.getClass().getName() + " while travelling");
}}
Now when we execute main class :
you can use :com.MobilePhone while travelling
you cannot use :com.LandLinePhone while travelling
Exception in thread "main" com.NotMovableException: this object is not movable
at com.TestMarkerInterface.goTravel(TestMarkerInterface.java:22)
at com.TestMarkerInterface.main(TestMarkerInterface.java:14)
So which ever class implements marker interface Movable
will pass the test else error message will be displayed.
This is the way instanceOf
operator check is done for Serializable, Cloneable etc
A marker interface in Java is an interface with no fields or methods. Put more simply, an empty interface in Java is called a marker interface. Examples of marker interfaces are the
Serializable
,Cloneable
andRemote
interfaces. These are used to indicate some information to compilers or JVMs. So if the JVM sees that a class isSerializable
, it can do some special operation on it. Similarly, if the JVM sees some class is implementingCloneable
, it can perform some operations to support cloning. The same is true for RMI and theRemote
interface. So in short, a marker interface indicates a signal or a command to the compiler or JVM.
The above started out as a copy of a blog post but has been lightly edited for grammar.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With