繁体   English   中英

如何将泛型接口实现为非泛型 class Java

[英]How to implement generic interface as a non-generic class Java

我想实现一个基于通用接口的 java class。 我收到错误 class GroupDaoImpl 必须声明为抽象或实现抽象方法 update()

我做错了什么?

我的界面

public interface EntitiesDao<T> {
    void add(List<?> entity);
    List<T> getList();
    void update(T entity);
    T findById(Long entityId);
    void delete(Long entityId);
}

我的 class

@Repository
public class GroupDaoImpl implements EntitiesDao {

    @PersistenceContext
    private EntityManager em;

    @Override
    public void add(Group group) {
        em.persist(group);
    }

    @Override
    public List<Group> getGroupsList() {
        CriteriaQuery<Group> criteriaQuery = em.getCriteriaBuilder().createQuery(Group.class);
        Root<Group> root = criteriaQuery.from(Group.class);
        return em.createQuery(criteriaQuery).getResultList();
    }

    @Override
    public void update(Group group) {
        em.merge(group);
    }

    @Override
    public Group findById(Long groupId) {
        Group group = em.find(Group.class, groupId);
        if (group == null) {
            throw new EntityNotFoundException("Группа с ID = " + groupId + " не найдена");
        }
        return group;
    }

    //удаляет сущность по id
    @Override
    public void delete(Long groupId) {
        Group group = em.find(Group.class, groupId);
        if (group != null) em.remove(group);
        else throw new EntityNotFoundException("Группа с ID = " + groupId + " не найдена");
    }

    public void addStudent(Student student){}

}

您的界面如何使用泛型,您必须使用通配符实现:

public class GroupDaoImpl implements EntitiesDao<Group> {}

对于 add 方法,您必须按照接口中声明的方式实现,您声明为List ,因此您必须实现为List

void add(List<?> entity);

执行:

@Override
public void add(List<Group> group) {

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM