Marker interface – Chỉ là một cái tên

Đú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.

5 1 vote
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x