我经常读到在Java中使用getClass()是不良设计的标志。所以...我有一个Hibernate的通用“ DAO”抽象类,其中有此方法:public List<T> findByDate(Class<T> clazz, Date date) { ... }我使用一个通用的“ DAO”抽象类,该方法的clazz参数类型为Class<T>,这是一种很常见的做法。我应该使用类似以下方式致电findByDate():myDao.findByDate(MyTable.class, date)但这就是问题所在。我没有稳定的MyTable类,因为该类是由Factory实例化的(工厂设计模式),所以我可以有MyTable1,MyTable2,MyTable3等。每个类都扩展了一个抽象类,所以我尝试了:myDao.findByDate(MyAbstractTable.class, date)但是在运行时它不起作用。我认为这是行不通的,因为我在MyAbstractTable,MyTable1,MyTable2等类(在其中为Hibernate指定列映射的类)中使用了Hibernate批注,因此必须使用特定的类。所以我的解决方案是使用类似:MyAbstractTable table = TableFactory.getInstance().createTable(key);和myDao.findByDate(table.getClass(), date)为了得到Factory返回的类型,它确实起作用了……但是我必须使用MyTable3,所以我想我做错了什么。整个设计有缺陷吗?谢谢。 (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 我经常读到在Java中使用getClass()表示设计不良。像这样的代码就是这种情况:if(foo.getClass() == MyClass.class) {....}您的情况并非如此:-)但是,我仍然不明白为什么您的抽象DAO不能具有由具体子类/构造函数设置的字段private Class<T> klass,然后该字段用于确定要传递的实际类。 (adsbygoogle = window.adsbygoogle || []).push({});
09-04 18:53