我有一个特殊的情况,我想创建一个可以接受“基础”注释作为其参数之一的注释:
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
接受不同的(数量和类型)参数提前致谢!
答案 0 :(得分:1)
我认为你不能真的这样做。
通常的做法是将@Fleet和@ Car和@Motorcycle中的一个应用于该类。不可否认,这并不理想。