Đúng như tiêu đề thì Marker interface chỉ là một cái tên ngoài ra nó không còn gì khác, không có method, không có static variabl etc chỉ là một cái interface rỗng.
Ví dụ như Serializable interface chúng ta đã gặp rất nhiều và nó chỉ là một interface rỗng như thế này.
public interface Serializable { // nothing here }
Tuy nhiên các Marker interface rất hữu ích vì khi bạn nhìn vào những class implement từ chúng sẽ biết ngay class đó sẽ có những chức năng gì, ví dụ như
1, Cloneable interface
Cloneable interface đại diện cho java.lang package trong java. Một class implement Cloneable để chỉ ra rằng nó có một method clone() dùng để tạo ra một bản sao instance tương tự chúng.
Nếu một class gọi đến method clone() của Object mà không implement Cloneable thì sẽ gây ra CloneNotSupportedException.
Note: Mặc định trong java nếu các class được khai báo mà không extends từ class nào khác thì java sẽ chỉ định cho nó kế thừa từ class Object.
Ví dụ
import java.lang.Cloneable; class MyClass implements Cloneable { String s; // A class constructor public MyClass(String s) { this.s = s; } @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } } public class Main { public static void main(String[] args) throws CloneNotSupportedException { MyClass myClass = new MyClass("Shareprogramming.net"); MyClass clone = (MyClass) myClass.clone(); System.out.println("Clone: " + clone.s); System.out.println("My class: " + myClass.s); } }
Output
Clone: Shareprogramming.net
My class: Shareprogramming.net
Nếu Myclass không implement Cloneable interface
class MyClass { String s; // A class constructor public MyClass(String s) { this.s = s; } @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } } public class Main { public static void main(String[] args) throws CloneNotSupportedException { MyClass myClass = new MyClass("Shareprogramming.net"); MyClass clone = (MyClass) myClass.clone(); System.out.println("Clone: " + clone.s); System.out.println("My class: " + myClass.s); } }
Output:
Exception in thread “main” java.lang.CloneNotSupportedException: MyClass
2, Serializable interface
Serializable interface đại diện cho java.io package. Được dùng để làm cho một object đủ điều kiện để lưu xuống file.
import java.io.*; class MyClass implements Serializable { String s; // MyClass class constructor public MyClass(String s) { this.s = s; } } public class Main { public static void main(String[] args) throws IOException, ClassNotFoundException { MyClass myClass = new MyClass("ShrareProgramming.net"); // Serializing 'myClass' FileOutputStream fos = new FileOutputStream("xyz.txt"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(myClass); // De-serializing 'myClass' FileInputStream fis = new FileInputStream("xyz.txt"); ObjectInputStream ois = new ObjectInputStream(fis); MyClass b = (MyClass)ois.readObject();//down-casting object System.out.println(b.s); // closing streams oos.close(); ois.close(); } }
Output: ShrareProgramming.net
3, Remote interface
Remote interface đại diện cho java.rmi package. Một remote object là một object có thể lưu trên một máy này và được truy cập từ một máy khác. Vì vậy để tạo ra một remote object chúng ta phải implement Remote interface.