2010-06-20 89 views

回答

7

註解是附加到類/方法/字段的元數據,框架可以使用它來確定圍繞這些類/方法/字段的必需功能。

常見用途包括:

  1. 標記方法作爲單元測試方法和相關聯的建立/拆除(例如JUnit和TestNG的)
  2. 標記爲持久類和字段(例如休眠)
  3. 標記類和字段作爲JMX的豆

註解是一個Java功能,並作爲斯卡拉等提供以及Java。

+0

註解是JVM中支持的Java特性,當然,但這並不會使它們自動成爲Scala的一部分。 – 2010-06-20 14:56:30

+0

特別是,由於您可以在Scala中註釋您無法用Java註釋或者甚至不存在Java中的東西,所以我非常肯定Scala Annotations不僅僅是一種簡單的1:1映射到Java註釋或JVM註釋。 – 2010-06-20 15:01:15

+0

我並沒有斷言有一對一的映射。但是我*說* JVM支持Java註釋,並且可以在Scala中使用。以上所有內容都適用於該類別。 – 2010-06-20 16:23:39

5

註解通常可以使信息與定義相關聯,例如,類,方法或變量的定義。註釋可以被編譯器使用或者被程序的其他部分訪問,例如在Java中:

@SuppressWarnings("deprecation") 
void useADeprecatedMethod() { 
    someObj.someDeprecatedMethod(); 
} 

這裏,@SuppressWarnings註釋告訴編譯器不會發出警告有關useADeprecatedMethod's使用someDeprecatedMethod

Java世界中的其他用途包括向類中添加信息,以瞭解它如何映射到關係數據庫以供像Hibernate這樣的OR映射器使用。

在Scala中,許多Java中的關鍵字或標記接口都是作爲Scala中的註釋實現的。例如@throws@serializable

下面是一個顯示Scala和Java與註釋幫助一起工作的示例。想象一下,我們將在Scala中定義一個Person類。當我們在Java中使用Person時,Java程序員會希望我們擁有setNamegetName方法,就像Java中的bean約定一樣。

Person類Scala中:這可以通過使用@BeanProperty註解實現

class Person { 
    @BeanProperty 
    var name = "Joe Bloggs" 
} 

在Java:

public void printPerson(Person p) { 
    // Scala added the getName method for us 
    System.out.println(p.getName()); 
} 
3

一個Java註釋的有趣的方面是對他們保留控制。當註釋類型(實現Annotation接口的Java類)被定義,它的一個屬性是其RetentionPolicy,之一:

  • SOURCE - 註解是由編譯器被丟棄。
  • CLASS - 註解將被編譯器記錄在類文件中,但不需要在運行時由VM保留。
  • RUNTIME - 註解將被編譯器記錄在類文件中,並在運行時由VM保留,因此可以反射性地讀取它們。
相關問題