我有一个特殊的情况,我想创建一个可以接受“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
接受不同的(数量和类型)参数提前谢谢!
最佳答案
我觉得你真的做不到。
通常的方法是在课堂上同时使用车队和汽车摩托车。无可否认,这并不理想。