1

F-Droid で公開したい ORMLite ライブラリを使用した Android プロジェクトがあります。プロジェクトは 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 ビルド プロセスは、上記と同じエラーで失敗しました。私のアリに関する限り、これを自分の側で「デバッグ」することができなくなったため、私は迷っています。プロジェクトに問題はないため、私が行う変更は純粋な当て推量です。

その後、もう1つ試しました:

@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

4

0 に答える 0