2012-01-13 62 views
3

我有一個特別的情況,我想創建一個可以接受「基地」註釋作爲它的一個參數的註釋:文摘Java註解

public @interface Fleet 
{ 
    int fleetSize(); 
    Vehicle fleetType(); 
} 

@Vehicle是「基地」標註爲不同這對他們來說是有意義的車輛,將接受不同的參數類型:

public @interface Vehicle {} 

public @interface Car extends Vehicle { 
    boolean is2WheelDrive(); 
} 

public @interface Motorcycle extends Vehicle { 
    String manufacturer(); 
} 

從而使@Fleet附註可用於像這樣:

// A fleet of 20 Hyabusas 
@Fleet(20, @Motorcycle("Hyabusas")) 
public void doSomething() { 
    // ... 
} 

// A fleet of 5 4-Wheel-drive cars 
@Fleet(5, @Car(false)) 
public void doSomethingElse() { 
    // ... 
} 

現在,首先,幾件事:是的,我知道這個例子說明了一個可怕的設計!我知道你不能用Java擴展註釋。

鑑於這兩種已知的罪惡,我怎麼可能,反正重構的代碼片段,這樣下面的滿足約束條件:

  • @Fleet註釋可以傳遞一個@Car@Motorcycle
  • @Car@Motorcycle接受不同的(數量和類型)論據

在此先感謝!

回答

1

我不認爲你真的可以做到這一點。

正常的做法是將@Fleet和@Car和@Motorcycle中的一個應用到類中。誠然,這並不理想。