摘要Java注释

时间:2012-01-13 20:47:32

标签: java annotations

我有一个特殊的情况,我想创建一个可以接受“基础”注释作为其参数之一的注释:

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 个答案:

答案 0 :(得分:1)

我认为你不能真的这样做。

通常的做法是将@Fleet和@ Car和@Motorcycle中的一个应用于该类。不可否认,这并不理想。