当前位置:  开发笔记 > 编程语言 > 正文

Java中静态方法的替代方案

如何解决《Java中静态方法的替代方案》经验,为你挑选了0个好方法。

我正在为我编写的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实现一个类方法(或者失败,类常量!)?

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有