我正在为我编写的Java程序制作一个迷你ORM ...我的数据库中的每个表都有一个类,都继承自ModelBase
.
ModelBase
是抽象的,提供了一堆静态方法,用于从db中查找和绑定对象,例如:
public static ArrayList findAll(Class cast_to_class) { //build the sql query & execute it }
所以你可以做一些事情,比如ModelBase.findAll(Albums.class)
获得所有持久专辑的列表.我的问题是,在这个静态上下文中,我需要从具体类Album中获取相应的sql字符串.我不能有像这样的静态方法
public class Album extends ModelBase { public static String getSelectSQL() { return "select * from albums.....";} }
因为Java中没有静态方法的多态性.但我不想创建getSelectSQL()
一个实例方法,Album
因为我需要创建一个实例,只是为了获得一个在行为上非常静态的字符串.
目前,findAll()
使用反射来获取相关类的相应sql:
select_sql = (String)cast_to_class.getDeclaredMethod("getSelectSql", new Class[]{} ).invoke(null, null);
但这非常糟糕.
那么任何想法?这是我一次又一次的一般问题 - 无法在类或接口中指定抽象静态方法.我知道为什么静态方法多态不会也无法工作,但这并不能阻止我再次使用它!
是否有任何模式/构造允许我确保具体的子类X和Y实现一个类方法(或者失败,类常量!)?