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

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接受不同的(数量和类型)参数
提前谢谢!

最佳答案

我觉得你真的做不到。
通常的方法是在课堂上同时使用车队和汽车摩托车。无可否认,这并不理想。

09-10 21:38