我有一个带有 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;
}
这为我解决了这个问题,ant 成功地构建了我的项目,并且该应用程序运行顺利。但是,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