Java通配符错误
我有一个BaseDao接口,可以使用hibernate将数据持久化到mysqlJava通配符错误,java,generics,bounded-wildcard,Java,Generics,Bounded Wildcard,我有一个BaseDao接口,可以使用hibernate将数据持久化到mysql public interface BaseDao<T extends Serializable> { public void saveAll(Collection<T> objects) throws PersistenceException; } 在某些类中,我声明ActivityDao: protected abstract ActivityDao<Activity1&g
public interface BaseDao<T extends Serializable> {
public void saveAll(Collection<T> objects) throws PersistenceException;
}
在某些类中,我声明ActivityDao:
protected abstract ActivityDao<Activity1> createActivityDao1();
受保护的抽象活动dao createActivityDao1();
以及一种方法:
private void persistData(ActivityDao<? extends BaseActivity> activityDao, Collection<? extends BaseActivity> data){
EntityTransaction transaction = activityDao.getEntityManager().getTransaction();
try {
transaction.begin();
activityDao.saveAll(data);
transaction.commit();
}
catch (HibernateException ex) {
private void persistData(ActivityDao使用两个具有相同边界的有界通配符并不意味着它们是相同的类型。在这种情况下,ActivityDao的实际类型参数是BaseActivity Serializable?是:公共抽象类BaseActivity实现了Serializable,Compariable{好吧,那将是乏味的。这是同一个问题。你必须找到某种方法使该类成为泛型类。或者你需要一些肮脏的解决方法才能使其正常工作。谢谢!删除了,因为它确实是同一个问题。我已经为集合和活动使用包装类解决了它。非常感谢你的回答!就是这样。在e发布问题我尝试将该方法实现为模板方法,但问题是,我有两个带有通配符的字段,当将它们传递给方法时,会导致相同的错误。我正在更新代码
private void persistData(ActivityDao<? extends BaseActivity> activityDao, Collection<? extends BaseActivity> data){
EntityTransaction transaction = activityDao.getEntityManager().getTransaction();
try {
transaction.begin();
activityDao.saveAll(data);
transaction.commit();
}
catch (HibernateException ex) {
Error:(62, 24) java: method saveAll in interface com.matomy.persistence.dao.BaseDao<T>
cannot be applied to given types;
required: java.util.Collection<capture#1 of ? extends
com.matomy.persistence.entity.activities.BaseActivity>
found: java.util.Collection<capture#2 of ? extends com.matomy.persistence.entity.activities.BaseActivity>
reason: actual argument java.util.Collection<capture#2 of ? extends com.matomy.persistence.entity.activities.BaseActivity>
cannot be converted to java.util.Collection<capture#1 of ? extends com.matomy.persistence.entity.activities.BaseActivity>
by method invocation conversion
public abstract class BaseActivity implements Serializable, Comparable<BaseActivity> {
private <T extends BaseActivity> void persistData(ActivityDao<T> activityDao, Collection<T> col){
EntityTransaction transaction = activityDao.getEntityManager().getTransaction();
try {
transaction.begin();
activityDao.saveAll(col);
transaction.commit();
}
catch (HibernateException ex) {
private void persistData(ActivityDao<CAP#1-of-? extends BaseActivity> activityDao, Collection<CAP#2-of-? extends BaseActivity> data){
EntityTransaction transaction = activityDao.getEntityManager().getTransaction();
try {
transaction.begin();
activityDao.saveAll(data);
transaction.commit();
}
catch (HibernateException ex) {
}
}
public void saveAll(Collection<CAP#1-of-? extends BaseActivity> objects) throws PersistenceException;
private <T extends BaseActivity> void persistData(ActivityDao<T> activityDao, Collection<T> data){