背景:我有一个相当受欢迎的小众应用程序,我想通过创建一个通用代码主库来扩展它,我可以用它来生成更多类似的应用程序,而且工作量很小。
超类(在库中):BaseTheme
子类(单独的应用程序):主题(扩展 BaseTheme,为每个应用程序提供一些特定方法)。比较器
在 Comparator 类中,我有一个 Arraylist。我想将 Comparator 移到库中,但这样做时,Arraylist 会引发错误,因为库中不存在主题
我尝试将 Arraylist 更改为 Arraylist,认为 Theme 是 BaseTheme 的扩展并且是允许的,但是当我尝试在 Arraylist 中创建主题时,这不起作用。
在应用程序代码中:
private ArrayList<Theme> mThemes;
private MyComparator mComparator;
mThemes = mComparator.compare(mSortType, mSortAorD, true, mThemes);
错误:MyComparator 类型中的方法 compare(int, int, Boolean, ArrayList) 不适用于参数 (int, int, boolean, ArrayList) - 我相信这是因为比较器的构造函数具有 ArrayList,因为 Theme 没有t 存在于库代码中
有什么办法可以做到这一点,还是我需要保持目前的状态(应用程序代码中的比较器)?
库代码:公共类 MyComparator {
private static Context mCtx;
public MyComparator(Context ctx) {
mCtx = ctx;
}
public ArrayList<BaseTheme> compare(final int type, final int sort, Boolean flurry, ArrayList<BaseTheme> list) {
Comparator<BaseTheme> myComparator = getComparator(Sort.SORT_ALPHABETICAL, Sort.DESC, flurry);
Collections.sort(list, myComparator);
myComparator = getComparator(type, sort, flurry);
Collections.sort(list, myComparator);
return list;
}
public abstract class BaseTheme {
public String mName;
public String mCreator;
public String mDate;
public String mAddress;
public int mThemeID;
public int mPopularity;
public boolean mIsFavorite;
public boolean mIsVisible;
public Context mCtx;
public BaseTheme(int themeID, String name, String creator, String date, String address, Boolean favorite,
Boolean visible, int popularity, boolean isFavorite, boolean isVisible, Context ctx) {
setThemeID(themeID);
setName(name);
setCreator(creator);
setDate(date);
setAddress(address);
setPopularity(popularity);
mIsFavorite = isFavorite;
mIsVisible = isVisible;
mCtx = ctx;
}
应用代码:
public class FragmentBaseGridActivity extends AbsListViewBaseActivity {
private ArrayList<Theme> mThemes;
private void refreshGrid() {
mThemes = mComparator.compare(mSortType, mSortAorD, true, mThemes);
ImageAdapter ad = (ImageAdapter) listView.getAdapter();
ad.notifyDataSetChanged();
}
public class Theme extends BaseTheme{
public String mStyle;
public Theme(int themeID, String name, String creator, String date, String style, String address, Boolean favorite,
Boolean visible, int popularity, Context ctx) {
super(themeID, name, creator, date, address, favorite, visible, popularity, favorite, visible, ctx);
}