我是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个函数,并在适用时调用它,但这似乎是浪费,必须有一个更快的方法。我怎样才能做到这一点?谢谢你的帮助。
答案 0 :(得分:5)
如果两个类都有一个可以在你的方法中使用的公共接口,你可以使用它并捕获这两种类型。
否则,您可以使用overloading或generic方法。
答案 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) {
//...
}
如果该方法对ImageButton
和Button
做了不同的事情,那么您可以使用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
}
}