OrmLite Generic create方法

时间:2014-09-07 10:15:00

标签: java generics ormlite

我想为扩展抽象类BusinessObject的每个BO包含一个create方法。我想出了下面显示的方法,但是在编译时我在createDao(...)语句中得到以下异常:

'invalid inferred types for D; inferred type does not conform to declared bound(s)'

这就是create方法的样子。

public abstract class BusinessObject {

    ...

    public <T extends BusinessObject> T create(T bo) throws InstantiationException, SQLException,
        NamingException {

        final Dao<T, Long> dao = DaoManager.createDao(getConnectionSource(), bo.getClass());

        bo.setTimestampAdded(System.currentTimeMillis());
        bo.setTimestampModified(System.currentTimeMillis());
        bo.setDateAdded(new Date(System.currentTimeMillis()));
        bo.setDateModified(new Date(System.currentTimeMillis()));

        dao.create(bo);

        return bo;
    }
}

在这个主题上,也许有人也可以将我与一个关于泛型问题的体面,全面的教程联系起来。那里有很多基本的教程,但关于中级的东西并不多。

1 个答案:

答案 0 :(得分:2)

好的,我一直在玩一点,发现更改方法签名以包含推断类是关键。

public <T extends BusinessObject> T create(T bo, Class<T> cls) throws InstantiationException,
        SQLException, NamingException {

    final Dao<T, Long> dao = DaoManager.createDao(getConnectionSource(), cls);

    bo.setTimestampAdded(System.currentTimeMillis());
    bo.setTimestampModified(System.currentTimeMillis());
    bo.setDateAdded(new Date(System.currentTimeMillis()));
    bo.setDateModified(new Date(System.currentTimeMillis()));

    dao.create(bo);

    return bo;
}

原因是getClass()返回Class<?>createDao(...)期望Class<T>。我想知道是否可以将Class<?>投射到Class<T>。然而,Eclipse会发出警告:

&#39;类型安全:取消选中从类转换为类&#39;