Android-Java通用SpinnerAdapter

Android-Java通用SpinnerAdapter,android,generics,spinner,Android,Generics,Spinner,我正在寻找这样做的方法: public class SimpleText_SpinnerAdapter extends ArrayAdapter<Enum1> { many lines of code with a one moment : String val = oneEnum1val_inparam.getlabel(); } public class SimpleText_SpinnerAdapter extends ArrayAdapter<Enum2>

我正在寻找这样做的方法:

public class SimpleText_SpinnerAdapter extends ArrayAdapter<Enum1> {
   many lines of code with a one moment : String val = oneEnum1val_inparam.getlabel();
}

public class SimpleText_SpinnerAdapter extends ArrayAdapter<Enum2> {
   exactly the same code than previously, but for Enum2
}

public class SimpleText_SpinnerAdapter extends ArrayAdapter<Enum3> {
   exactly the same code than previously, but for Enum3
}
这使得3个微调器有3个适配器,其中包含来自3个不同枚举的值,这些枚举的构造方式完全相同,但具有不同的值

当然,每个枚举类型都有一个getLabel方法

我想找到一种方法来做到这一点,而不需要为每个适配器复制粘贴3次相同的代码。一种通用的,可以被3个专用的引用

我没有找到解决办法。 你能帮我做这个吗

或者如果你有更有效的方法

奥利弗怎么样

public class SimpleText_SpinnerAdapter<T extends Enum<T> & ProvidesLabel>
    extends ArrayAdapter<T>
{
    // implementation
}



public enum Enum1 implements ProvidesLabel
{
        Entry1("label 1"),
        Entry2("label 2");

    private final String label;

    private Enum1(String label)
    {
        this.label = label;
    }

    @Override 
    public String getLabel()
    {
        return this.label;
    }
}

public interface ProvidesLabel
{
    String getLabel();
}
使用构造函数实例化类:

 SimpleText_SpinnerAdapter<Enum1> enum1 =
        new SimpleText_SpinnerAdapter<Enum1>(context, textViewResourceId);
那么:

public class SimpleText_SpinnerAdapter<T extends Enum<T> & ProvidesLabel>
    extends ArrayAdapter<T>
{
    // implementation
}



public enum Enum1 implements ProvidesLabel
{
        Entry1("label 1"),
        Entry2("label 2");

    private final String label;

    private Enum1(String label)
    {
        this.label = label;
    }

    @Override 
    public String getLabel()
    {
        return this.label;
    }
}

public interface ProvidesLabel
{
    String getLabel();
}
使用构造函数实例化类:

 SimpleText_SpinnerAdapter<Enum1> enum1 =
        new SimpleText_SpinnerAdapter<Enum1>(context, textViewResourceId);

非常感谢你!它就像一个符咒。这是一种多么疯狂的代码如果我能问一下并占用你一点时间,那意味着什么:公共类SimpleText_SpinnerAdapter扩展了ArrayAdapter,哇,我不太明白:-没问题。这意味着SimpleText_SpinnerAdapter将在扩展Enum类的类型T上操作,并且它还必须实现接口ProvidesLabel。现在定义的类型在extends子句中传递给ArrayAdapter;看看-它从一开始就解释了泛型。他们是一个非常强大的工具一旦理解。非常感谢你!我喜欢这种编程语言:-非常感谢!它就像一个符咒。这是一种多么疯狂的代码如果我能问一下并占用你一点时间,那意味着什么:公共类SimpleText_SpinnerAdapter扩展了ArrayAdapter,哇,我不太明白:-没问题。这意味着SimpleText_SpinnerAdapter将在扩展Enum类的类型T上操作,并且它还必须实现接口ProvidesLabel。现在定义的类型在extends子句中传递给ArrayAdapter;看看-它从一开始就解释了泛型。他们是一个非常强大的工具一旦理解。非常感谢你!我喜欢这种编程语言:-