當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Java Marker用法及代碼示例


它是一個空接口(沒有字段或方法)。標記接口的示例有可序列化、可克隆和遠程接口。所有這些接口都是空接口。

public interface Serializable 
{
  // nothing here
}

實時應用程序中使用的標記接口示例:

  1. 可克隆的接口:java.lang 包中存在可克隆接口。有一個方法clone()Object類。實現 Cloneable 接口的類表明 clone() 方法創建該類實例的 field-for-field 副本是合法的。
    在未實現 Cloneable 接口的類實例上調用 Object 的克隆方法會導致拋出異常 CloneNotSupportedException。按照約定,實現此接口的類應重寫 Object.clone() 方法。
    參考這裏更多細節。
  2. Java

    
    // Java program to illustrate Cloneable interface 
    import java.lang.Cloneable; 
      
    // By implementing Cloneable interface 
    // we make sure that instances of class A 
    // can be cloned. 
    class A implements Cloneable 
    { 
        int i; 
        String s; 
      
        // A class constructor 
        public A(int i,String s) 
        { 
            this.i = i; 
            this.s = s; 
        } 
      
        // Overriding clone() method 
        // by simply calling Object class 
        // clone() method. 
        @Override
        protected Object clone() 
        throws CloneNotSupportedException 
        { 
            return super.clone(); 
        } 
    } 
      
    public class Test 
    { 
        public static void main(String[] args) 
            throws CloneNotSupportedException 
        { 
            A a = new A(20, "GeeksForGeeks"); 
      
            // cloning 'a' and holding 
            // new cloned object reference in b 
      
            // down-casting as clone() return type is Object 
            A b = (A)a.clone(); 
      
            System.out.println(b.i); 
            System.out.println(b.s); 
        } 
    } 

    輸出:
    20
    GeeksForGeeks
  3. 可串行化接口:可串行化接口存在於java.io包中。它用於使對象有資格將其狀態保存到文件中。這就是所謂的序列化
    未實現此接口的類將不會對其任何狀態進行序列化或反序列化。可序列化類的所有子類型本身都是可序列化的。
  4. Java

    
    // Java program to illustrate Serializable interface 
    import java.io.*; 
      
    // By implementing Serializable interface 
    // we make sure that state of instances of class A 
    // can be saved in a file. 
    class A implements Serializable 
    { 
        int i; 
        String s; 
      
        // A class constructor 
        public A(int i,String s) 
        { 
            this.i = i; 
            this.s = s; 
        } 
    } 
      
    public class Test 
    { 
        public static void main(String[] args) 
          throws IOException, ClassNotFoundException 
        { 
            A a = new A(20,"GeeksForGeeks"); 
      
            // Serializing 'a' 
            FileOutputStream fos = new FileOutputStream("xyz.txt"); 
            ObjectOutputStream oos = new ObjectOutputStream(fos); 
            oos.writeObject(a); 
      
            // De-serializing 'a' 
            FileInputStream fis = new FileInputStream("xyz.txt"); 
            ObjectInputStream ois = new ObjectInputStream(fis); 
            A b = (A)ois.readObject();//down-casting object 
      
            System.out.println(b.i+" "+b.s); 
      
            // closing streams 
            oos.close(); 
            ois.close(); 
        } 
    } 

    輸出:
    20 GeeksForGeeks
  5. 遠程接口:遠程接口存在於java.rmi包中。遠程對象是存儲在一台機器上並從另一台機器訪問的對象。因此,要使一個對象成為遠程對象,我們需要使用 Remote 接口來標記它。這裏,Remote接口用於標識其方法可以從非本地虛擬機調用的接口。任何作為遠程對象的對象都必須直接或間接實現該接口。遠程管理接口(遠程方法調用)提供了一些遠程對象實現可以擴展的便利類,以方便遠程對象的創建。


相關用法


注:本文由純淨天空篩選整理自佚名大神的英文原創作品 Marker interface in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。