【发布时间】:2013-07-23 10:16:04
【问题描述】:
我是 Java 新手,想了解这里的最佳实践。
假设我有一个通用类(例如Car)和一些共享某些属性的继承类(Honda、Subaru)。
public abstract class Car {
public static short id;
}
public class Honda extends Car {
public static final short id = 1;
}
public class Subaru extends Car {
public static final short id = 2;
}
这不是违反 DRY 原则吗?那么使用注解呢?
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Id {
public short value();
}
public abstract class Car {
}
@Id(1)
public class Honda extends Car {
}
@Id(2)
public class Subaru extends Car {
}
【问题讨论】:
-
您的
Car既不是通用的,也不是您的其他类继承自它。 -
您的课程已经有一个 ID。它们被称为
Car、Honda和Subaru。可以使用反射检索这些名称。您可能需要的唯一额外 ID 是serialVersionUID,但它是特定于类实现的,因此不会违反 DRY 原则。 -
请注意,您不能继承
static成员(字段和方法)。 (好吧,之前评论中的“您可能需要的唯一额外 ID”是夸大其词) -
@RohitJain 我忘了扩展我的示例中的类,我的错。 @owlstead
id只是一个例子,可能是 nbSeats。另外,虽然我知道该示例由于继承了静态成员而应该失败,但它似乎运行得很好。我要问的是:我的用例可以使用注释吗?
标签: java annotations static-members