是否有可能将这两种方法合并在一起,可能使用..多态?

时间:2014-02-13 11:40:00

标签: java android

在我的Android应用程序中,我有ItemCategory POJO和ItemSubcategory POJO,它们都扩展了包含一些共同特征的类别POJO。

我有一个自定义的Load Spinner方法,我将对象的ArrayList传递给它,然后将它们加载到微调器(用于下拉/选择的Android名称)

我尝试将ArrayList传递给单个方法loadCategoriesIntoSpinner(它接受一个ArrayList作为参数),我希望它能够理解Im传递的是一个ArrayList,但它没有。

public static void loadCategoriesIntoSpinner(Context context, ArrayList<ItemCategory> array, Spinner spinner) {

    // Creating adapter for spinner
    ArrayAdapter<ItemCategory> dataAdapter = new ArrayAdapter<ItemCategory>(context,
            R.drawable.simple_spinner_item, array);

    // Drop down layout style - list view with radio button
    dataAdapter
            .setDropDownViewResource(R.drawable.simple_spinner_dropdown_item);

    // Attaching data adapter to spinner
    spinner.setAdapter(dataAdapter);
}

public static void loadSubcategoriesIntoSpinner(Context context, ArrayList<ItemSubcategory> array, Spinner spinner) {

    // Creating adapter for spinner
    ArrayAdapter<ItemSubcategory> dataAdapter = new ArrayAdapter<ItemSubcategory>(context,
            R.drawable.simple_spinner_item, array);

    // Drop down layout style - list view with radio button
    dataAdapter
            .setDropDownViewResource(R.drawable.simple_spinner_dropdown_item);

    // Attaching data adapter to spinner
    spinner.setAdapter(dataAdapter);
}

以下是Category对象:

主要类别:

abstract public class Category {

    private int id;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return this.name;
    }

} // End of Class

继承类ItemCategory

public class ItemCategory extends Category {

    private String logo;

    public String getLogo() {
        return logo;
    }

    public void setLogo(String logo) {
        this.logo = logo;
    }

}  // End of Class

继承类ItemSubcategory:

public class ItemSubcategory extends Category {

    private int parentID;

    public void setParentID(int parentID) {
        this.parentID = parentID;
    }

    public int getParentID() {
        return parentID;
    }

}  // End of Class

2 个答案:

答案 0 :(得分:3)

public static void loadSubcategoriesIntoSpinner(Context context, List<? extends Category> array, Spinner spinner)

public static void loadSubcategoriesIntoSpinner(Context context, List<Category> array, Spinner spinner)

如果您将列表创建为List<Category>

我建议您使用界面List而不是像ArrayList这样的特定实现。这样您就可以更改实现(例如LinkedList),而无需修改代码。

答案 1 :(得分:2)

public static void <T extends Category> loadCategoriesIntoSpinner(Context context, List<T> array, Spinner spinner) {
    ArrayAdapter<T> dataAdapter = new ArrayAdapter<T>(context, R.drawable.simple_spinner_item, array);
    ...