如何创建接受未知 class 类型和 return 正确对象的辅助方法

How do I create a helper method which accepts unknown class types and return the correct object

我有以下代码行供 ORMLITE 创建 dao(数据访问对象)。我试图通过为不同的数据库 tables/entities.

编写相同的语句来避免为所有实体重复自己
Dao<Entity, String> entityDao = DaoManager.createDao(connectionSource,Entity.class);

我如何创建一个方法来接受我拥有的任何实体和 return 正确的 entityDao 对象。

这样我就可以结合逻辑

Dao<UserEntity, String> userEntityDao = DaoManager.createDao(connectionSource,UserEntity.class);

Dao<AccountEntity, String> accountEntityDao = DaoManager.createDao(connectionSource,AccountEntity.class);

我试过以下方法:

  private Dao<?, String> createDAO(Class<?> dataClass) throws SQLException{
        // instantiate the dao
        return DaoManager.createDao(connectionSource, dataClass);
    }

但不幸的是我收到以下错误:

incompatible types: inferred type does not conform to upper bound(s)
    inferred: Dao<CAP#1,?>
    upper bound(s): Dao<CAP#1,?>,Dao<?,String>
  where CAP#1 is a fresh type-variable:
    CAP#1 extends Object from capture of ?

您需要将通用类型参数 T 添加到您的 createDAO 方法:

private <T> Dao<T, String> createDAO(Class<T> dataClass) throws SQLException {
    return DaoManager.createDao(connectionSource, dataClass);
}

如果您查看 DaoManager.createDao 的定义,您会发现它的定义方式类似,但更复杂:

public static <D extends Dao<T,?>,T> D createDao(ConnectionSource connectionSource,
                                                 Class<T> clazz) throws SQLException