Android java方法 - 参数可以是多种类型吗?

时间:2013-12-31 08:12:24

标签: java android methods

我是java / android的新手,非常感谢这方面的帮助。我希望我的java方法能够为参数接受多种类型。例如,变量myButton可以是ImageButton,也可以只是Button。 myFunction中的代码对myButton是ImageButton还是Button都有效。

if (condition) {
    ImageButton myButton = (ImageButton) findViewById(R.id.myButtonID);
    myFunction(myButton);
} else {
    Button myButton = (Button) findViewById(R.id.myButtonID);
    myFunction(myButton);
}

public void myFunction(Button or ImageButton myButton) {
    ....identical code for myButton which could be an ImageButton or Button....
}

我显然可以为参数类型写出2个函数,并在适用时调用它,但这似乎是浪费,必须有一个更快的方法。我怎样才能做到这一点?谢谢你的帮助。

3 个答案:

答案 0 :(得分:5)

如果两个类都有一个可以在你的方法中使用的公共接口,你可以使用它并捕获这两种类型。

否则,您可以使用overloadinggeneric方法。

答案 1 :(得分:2)

取决于方法对传入参数的作用。

通常,您使用polymorphism。查看继承图,

ImageButton extends ImageView extends View extends Object

Button extends TextView extends View extends Object

最具体的常见超类是View。如果该方法可以在View上运行,那么您应该将参数类型指定为View

public void myFunction(View view) {
    //...
}

如果该方法对ImageButtonButton做了不同的事情,那么您可以使用method overloading。也就是说,两种方法采用不同的参数:

public void myFunction(ImageButton imageButton) {
    //...
}

public void myFunction(Button button) {
    //...
}

在极少数情况下,基于generics的解决方案也可以运行。请注意,编译器实际上会为传入的每种不同类型生成代码的副本,因此您可以选择基于多态的解决方案:

public <ParamType extends View> void myFunction(ParamType param) {
    //...
}

答案 2 :(得分:0)

你应该使用Button和ImageButton的公共超类,例如View,然后:

public void myFunction(View view) {
    if(view instanceof Button) {
        Button btn = (Button) view;
        // do something with Button instance
    }

    if(view instanceof ImageButton) {
        ImageButton iBtn = (ImageButton) view;
        // do something with Image Button instance
    }
}