Java 如何使用具有不同类型的方法重写方法?

Java 如何使用具有不同类型的方法重写方法?,java,Java,我有两节课 GenericDaoWithObjectId.class GenericDao.class 我想用GenericDaoWIthObjectId中的方法重写或创建GenericDao中的方法。出现这个问题的原因是,当我阅读JVM时,我认为列表和列表以及映射和映射可能是相同的。如何使其工作?正如您所注意到的,不能仅通过类型参数重载方法;i、 例如,如果两个方法签名仅在类型参数上不同,则它们被视为相同的方法。这是因为Java通过擦除实现了泛型——方法在编译时会去掉它们的类型参数,所以它们实

我有两节课

GenericDaoWithObjectId.class

GenericDao.class


我想用GenericDaoWIthObjectId中的方法重写或创建GenericDao中的方法。出现这个问题的原因是,当我阅读JVM时,我认为列表和列表以及映射和映射可能是相同的。如何使其工作?

正如您所注意到的,不能仅通过类型参数重载方法;i、 例如,如果两个方法签名仅在类型参数上不同,则它们被视为相同的方法。这是因为Java通过擦除实现了泛型——方法在编译时会去掉它们的类型参数,所以它们实际上会变成相同的方法


可以通过添加其他参数来区分这两种方法,也可以通过更改其中一种方法的名称来实现这一点;这些是唯一的选择。

我必须上课似乎我有两门课:。谢谢你的回答。我担心这可能是唯一的解决办法,但如果你确定我无能为力,我会这么做,再次感谢你。
public abstract class GenericDaoWithObjectId<T extends IEntity, Z extends Serializable> extends GenericDao<T> {
    public Map<Object, T> findByIdsAsMap(List<Object> ids, boolean addNonDeletedConstraint) throws DaoException {
        String query = addNonDeletedConstraint ? QUERY_FIND_NON_DELETED_BY_IDS : QUERY_FIND_BY_IDS;
        query = query.replaceAll("\\{type\\}", type);
        Query q = getSession().createQuery(query);
        q.setParameterList("ids", ids);
        List<T> entities = (List<T>) q.list();
        if (entities.size() != ids.size()) {
            throw new DaoException(DaoErrorCodes.OBJECT_NOT_FOUND);
        }
        Map<Object, T> result = new HashMap<Object, T>(); // I would've done that in query (using SELECT new map(u.id, u), but hibernate has a bug...
        // (https://hibernate.onjira.com/browse/HHH-3345)
        for (T e : entities) {
            result.put(e.getId(), e);
        }
        return result;
    }
}
public abstract class GenericDao<T extends IEntity> {
    public Map<Long, T> findByIdsAsMap(List<Long> ids, boolean addNonDeletedConstraint) throws DaoException {
        String query = addNonDeletedConstraint ? QUERY_FIND_NON_DELETED_BY_IDS : QUERY_FIND_BY_IDS;
        query = query.replaceAll("\\{type\\}", type);
        Query q = getSession().createQuery(query);
        q.setParameterList("ids", ids);
        List<T> entities = (List<T>) q.list();
        if (entities.size() != ids.size()) {
            throw new DaoException(DaoErrorCodes.OBJECT_NOT_FOUND);
        }
        Map<Long, T> result = new HashMap<Long, T>(); // I would've done that in query (using SELECT new map(u.id, u), but hibernate has a bug...
                                                      // (https://hibernate.onjira.com/browse/HHH-3345)
        for (T e : entities) {
            result.put((Long) e.getId(), e);
        }
        return result;
    }
}