mik*_*era 5 java oop api-design properties marker-interfaces
我正在开发一个较大的Java类层次结构,其中一些具有我在运行时查询感兴趣的特定属性(该属性绝对仅适用于类,而不是特定实例).
我可以创建一个抽象的布尔方法isFooBar(),子类可以实现它来指示属性是否存在:
public abstract class MyBaseClass {
...
public abstract boolean isFooBar();
}
Run Code Online (Sandbox Code Playgroud)
或者我可以使用标记接口FooBarProperty并对接口进行instanceof检查:
public class MyConcreteClass extends MyBaseClass implements FooBarProperty {
...
}
Run Code Online (Sandbox Code Playgroud)
或者我猜您甚至可以使用AmitD建议的注释:
@FooBarAnnotation
public class MyConcreteClass extends MyBaseClass {
...
}
Run Code Online (Sandbox Code Playgroud)
每种方法的优缺点是什么,通常应该优先考虑哪些方法?
标记接口是在类层次结构中继承的,因此它们的功能有限(您无法为某些特定子类“删除”此标记接口),并且我不能推荐它们(Cloneable 是一个不好的例子)。问题是 - 你的属性真的绑定到对象的类,而不是实例吗?如果是这样,注释会更好,因为它们不会在 API 中添加额外的方法,并且更容易维护 - 您只需添加/删除注释(在检查方法的情况下,您必须检查所有子类,无论它们是否覆盖无论是否)。
编辑:在你的情况下,我会问自己一个问题:我的属性是“持久”(适用于给定类的所有实例)还是“可见”(仅适用于某些实例)
| 归档时间: |
|
| 查看次数: |
725 次 |
| 最近记录: |