我有一个带有ORMLite库的Android项目,我想在F-Droid上发布。该项目在Eclipse中编译没有问题。但是,F-Droid使用ant来构建项目,而在他们这一方面,项目无法在下面的(汇总)代码中构建错误:
private Dao<Habit, Integer> habitDao;
private Dao<Day, Integer> dayDao;
public Dao<Habit, Integer> getHabitDao() throws SQLException {
if (habitDao == null) {
habitDao = getDao(Habit.class);
}
return habitDao;
}
public Dao<Day, Integer> getDayDao() throws SQLException {
if (dayDao == null) {
dayDao = getDao(Day.class);
}
return dayDao;
}
错误在habitDao = getDao(Habit.class)和dayDao = getDao(Day.class)行上,并出现以下错误消息:
type parameters of D cannot be determined; no unique maximal instance exists for type variable D with upper bounds com.j256.ormlite.dao.Dao,com.j256.ormlite.dao.Dao
这与此处描述的问题相同:https://groups.google.com/forum/?fromgroups=#!topic/ormlite-android/rUVI0d-khKk,并且可能是Java编译器中的错误。
现在,我不是专家开发人员,所以添加显式强制转换的方法对我来说并不直观。以下是我改变代码的方式:
public Dao<Habit, Integer> getHabitDao() throws SQLException {
if (habitDao == null) {
habitDao = getDao(Habit.class);
}
return (Dao<Habit, Integer>)habitDao;
}
public Dao<Day, Integer> getDayDao() throws SQLException {
if (dayDao == null) {
dayDao = getDao(Day.class);
}
return (Dao<Day, Integer>)dayDao;
}
这解决了我的问题,蚂蚁在我的头上成功构建了项目,而且应用程序顺利运行。但是,F-Droid的ant构建过程仍然失败,并出现与上述相同的错误。现在我迷路了,因为我不能再“调试”这个,就我的蚂蚁而言,项目没有任何问题,因此我所做的任何改变都是纯粹的猜测。
之后我再尝试了一件事:
@SuppressWarnings("unchecked")
public Dao<Habit, Integer> getHabitDao() throws SQLException {
if (habitDao == null) {
habitDao = (Dao<Habit, Integer>)getDao(Habit.class);
}
return (Dao<Habit, Integer>)habitDao;
}
@SuppressWarnings("unchecked")
public Dao<Day, Integer> getDayDao() throws SQLException {
if (dayDao == null) {
dayDao = (Dao<Day, Integer>)getDao(Day.class);
}
return (Dao<Day, Integer>)dayDao;
}
但这是纯粹的猜测,在F-Droid方面,构建过程仍然失败并出现同样的错误。
非常感谢任何有关如何解决这个问题的建议。
编辑:该应用程序是开源的,所以任何愿意尝试使用ant自己构建它的人都欢迎:https://github.com/blaztriglav/did-i