2010-10-19 42 views
3

如何在java.how中創建自己的標記接口來通知JVM將其視爲特殊類?任何人都可以詳細闡述它。java中的標記接口

在此先感謝....

+1

你有什麼樣的「特殊」? – djna 2010-10-19 06:13:45

回答

6

你不能用JVM做任何事情。

嗯,你可以,但你很少想要這樣做。可以在JVM中「插入」JVM agents

但標記接口並未用於此 - 它們用於標記符合條件的類。例如,在JVM中未檢查到例如Serializable - 它由ObjectOutputStream進行檢查。

因此,您可以創建public interface MyMarker {}並使用instanceof來驗證給定的類是否以您自己的邏輯來實現它。

然而,由於Java 1.5中,要做到這一點的最佳方法是通過一個註釋(即使你使用JVM代理) -

public @interface MyMarker {..} 

@MyMarker 
public class MyClass { .. } 

然後驗證:

object.getClass().isAnnotationPresent(MyMarker.class); 
0

標記在Java中的接口是與無接口的字段或方法或簡單字在java中的空接口被稱爲標記接口。

市場接口的例子是Serializable,Clonnable和Remote接口。

標記接口用作標記將消息傳遞給java編譯器,以便它可以爲實現它的類添加特殊行爲。

您可以創建我們自己的標記界面。

1)Cheque.java

public interface Cheque { 
} 

2)BankDraft.java

public interface BankDraft { 
} 

3)Payment.java

public class Payment implements BankDraft{ 

public void paymentByCheque() { System.out.println("Payment By Cheque"); }

public void paymentByBankDraft() { 


    System.out.println("Payment by Draft"); 


} 
} 

4)MainClass。的java

public class MainClass { 

Payment p = new Payment(); public static void main(String[] args) {

 if (p instanceof Cheque) { 
     p.paymentByCheque(); 
    } 

    if (p instanceof BankDraft) { 
      p.paymentByBankDraft(); 
    } 


} 
} 

在上面的例子中,我已經創建兩個空接口檢查銀行匯票。付款類實現了BankDraft界面。在MainClass類中,兩個接口都表現爲標記,MainClass的輸出取決於您在Payment類中實現的接口。

希望這會有所幫助。