2009-12-03 108 views
16

我有興趣找出究竟哪些Java註釋人們認爲是最有用的在開發過程中。這不一定僅限於核心Java API,您可以包含在第三方庫中找到的註釋或您自己開發的註釋(確保包含指向源的鏈接)。有用的Java註釋

我在共同的發展任務,而不是知道爲什麼在JPA的@ManyToOne(optional=false)是真棒真正感興趣...

包括註釋和爲什麼它的一般發展提供有益的描述。

+0

[創建自己的測試運行使用Java註釋](http://www.singhajit.com/java-custom-annotations/) – 2017-01-22 08:31:05

回答

20

我發放了一堆upvotes爲其他用戶,但只給我兩毛錢的只有三個註解我在開發任何規律性使用是由編譯器直接使用的主要註釋:

@Override - 當您重寫另一個方法時,非常適合在您的代碼中進行顯式指定。如果您不以自己認爲的方式覆蓋某個方法(請參閱此other SO post),還有被標記爲編譯錯誤的額外好處。這個標誌告訴編譯器你打算重寫某些東西,所以如果你不知道(例如,你忘記了方法簽名中的一個參數),編譯器會抓住它。

@Deprecated - 指出您正在標記的任何內容,從現在開始不應使用。編譯器將生成警告,以使用您標記爲棄用的任何代碼元素。一般來說,貶低說「這是在過去,但它可能會在未來版本中消失。」請確保您也使用關聯的「@deprecated」Javadoc標誌與此結合起來告訴人們他們應該使用什麼。

@SuppressWarnings - 告訴編譯器禁止它會產生的特定警告。這對於您有意使用不推薦使用的方法時可能很有用,您可以阻止棄用警告。我傾向於使用它來阻止每個人對可序列化類的每個人最喜歡的「序列化UID」警告(無論您是否需要這是另一次的另一次辯論)。對於那些你知道你正在做的事情正在產生警告的案例來說,這很方便,但你100%確定這是你想要的正確行爲。

看那Sun Annotations Guide,並檢查了部分「註解編譯器使用」。這三個人進行了相當長的討論。

7

@Test

JUnit 4)它是由書寫和理解測試文件相當多的清潔劑。另外,添加expected屬性的功能在這裏和那裏保存了幾行代碼。

3

Junit 4提供了非常有用的註釋。 Here's a tutorial說明了用於定義測試的註釋的用法。

例如

@Test(expected= IndexOutOfBoundsException.class) public void empty() { 
    new ArrayList<Object>().get(0); 
} 

正如丹指出的那樣,TestNG是這樣做的。

+1

一樣TestNG的,這是JUnit得到這個想法的地方。 – 2009-12-03 22:49:48

+0

當然!我完全忘記了這一點。 – 2009-12-03 23:03:41

6

這些都應該是有用的,你可以在你的項目定義他們更好地溝通的意圖:

  • @ThreadSafe
  • @Immutable
  • @ValueObject
  • @BagOfFunctions(如java.util中。收藏)
  • etc
7

@Deprecated

Introduced in Java 5

  • 它可以幫助開發人員查看IDE中已棄用的內容。 (在此之前,大多數IDE仍然可以從特定方法的javadoc註釋中提取@deprecated,但是此註釋是使其成爲關於該方法本身的元信息的一種不錯方式,而不是文檔中的註釋。)
  • 當您使用不推薦使用的方法時,編譯器也會使用它來打印警告。
+3

遺憾的是,它沒有將描述性評論作爲參數。希望看到@deprecated(「不安全的方法,使用等等等等)」 – serg10 2009-12-03 23:30:21

+0

我認爲它不採取參數的原因是因爲已經有一個@Deprecated Javadoc標籤來做到這一點。 – 2009-12-04 05:38:13

9

@Override有我的投票。它立即清楚你的方法是什麼,並使你的代碼更具可讀性。

+0

還在大多數IDE中標記了一個不正確的重寫方法。 – 2009-12-03 23:10:15

+0

我不同意。與現代的IDE,它是多餘的和無用的。我不明白爲什麼如此多的@Override出現在這個網站上,是因爲Eclipse默認添加了這個功能,並且許多人使用Eclipse? – irreputable 2009-12-04 02:12:30

+1

並非每個構建都發生在IDE中。通過Ant,Maven或CI批量構建仍然受益於@Override之類的註釋。他們還幫助那些拒絕放棄vim的團隊成員。 – 2009-12-04 02:45:54

3

這裏有一些註釋我在日常使用的日常發展

春:

  1. @Autowired - 用於汽車電線豆
  2. @Rollback - 如果設置爲true時將回滾在測試用例內完成的所有數據庫操作

JUnit:

  1. @Test - 告訴大家一個方法是一個測試用例
  2. @Ignore - 如果你想忽略任何的測試用例
  3. @Before - 代碼,應該先運行每個測試用例

JPA:

  1. @Entity - 要知道,一個POJO是JPA實體
  2. @Column - 屬性映射到數據庫列
  3. @Id - 告訴一個java屬性是主鍵
  4. @EmbeddedId - 用於複合主鍵
  5. @Transient - 這個屬性不應該堅持
  6. @Version - 用於管理樂觀鎖定
  7. @NamedQuery - 用於聲明本地SQLS
  8. @OneToMany - 一對多的關係
  9. @ManyToOne - 多對一的關係

我只包含了最基本的部分。您可以從以下鏈接找到有關所有JPA註釋的詳細信息。

http://www.oracle.com/technology/products/ias/toplink/jpa/resources/toplink-jpa-annotations.html

http://www.hiberbook.com/

0

我使用的方法和參數的註釋例如啓動一個週末的項目實施程序通過框架合同

...myMethod的(@NotNull字符串一個,@NotNullOrEmpty串B){

 if (!validate()){ 
     raiseException .. 
    } 

}

我被困在自動獲取PARAM值的點。 Java反射沒有它。在我遇到這個限制之前,從來沒有理解過幾個人在Java上的咆哮。

+0

不能擁有它,因爲該信息僅在調試版本中可用...不知道它是否是一個好主意總是讓它可用... – TofuBeer 2009-12-04 03:14:00

+1

想到這個......而不是使用該名稱可以不用某種方式使用該職位?這是一件有趣的事情(以及我曾考慮過的事情......)。 – TofuBeer 2009-12-04 03:30:55

7

個人而言,我一直在尋找的JSR303 Bean驗證,它提供了註解,我想這些都將變得更加普遍,這裏只有JSR的幾個實現,到目前爲止,但他們提供的註釋,比如:

@NotNull private String name; 
@NotNull @Size(min = 5, max = 30) private String address; 

此處瞭解詳情:http://jcp.org/en/jsr/detail?id=303

+0

我使用'@ Nonnull'和'@ CheckForNull'大量使用FindBugs。 – 2013-11-25 15:04:31

2

@Given

允許一個JUnit測試,以建立在另一個TE的返回值ST。需要JExample

11

我找到作者Brian Goetz在他的著作 「Java併發實踐」 中定義的,他併發相關的註釋是非常有用的:

  • @GuardedBy
  • @Immutable
  • @NotThreadSafe
  • @ThreadSafe

它們特別有用,因爲FindBugs具有使用它們的模式。

一個罐子,文檔是免費提供的http://www.javaconcurrencyinpractice.com/

2

我們開始使用一種稱爲龍目島http://projectlombok.org/)編譯時間的工具。您註釋類,成員等,並且方法在編譯時自動生成。這是一個巨大的生產力提升,並節省數百行繁瑣的編碼。

您是否想要自動生成toString()方法?只需用@ToString註釋您的課程即可。

厭倦了爲成員定義getter和setter?用@Getter和/或@Setter註釋您的班級,並自動添加。

想要SLF4J記錄器記錄東西嗎? @Slf4j爲您創建一個私人靜態最終記錄器。

@Data 
public class MyBean { 
    // Getters for x and y, setter for y and constructor with x as arg automatically created! 
    // toString() and hashCode() methods are there too! 
    private final int x; 
    private int y; 
} 

@Slf4j 
public class SomeClass { 
    public void doSomething() { 
     log.info("I've got log."); 
    } 
} 

設置它很簡單:只需添加一個provided maven依賴。還有一個小巧的Eclipse/IntelliJ插件。

退房的特點有完整列表:http://projectlombok.org/features/index.html