首页 > 解决方案 > 带“或”的动态参数

问题描述

我想知道是否可以做这样的事情:

public String gE(EditText text || TextInputEditText text || BootstrapEditText text){
      return text.getText().toString();
}

感知“或”的使用,参数基本上具有相同的属性,但我想要一种方式,我可以传递一个或另一个,而不必为每个元素创建一个。在java中可以做到这一点吗?

标签: javaandroidmethods

解决方案


您可以传递一个对象,然后检查其类型。

public String gE(Object o) {
    if(o instanceof TextInputEditText) {
        return ((TextInputEditText) o).getText().toString();
    }
    else if(o instanceof BootstrapEditText) {
        return ((BootstrapEditText) o).getText().toString();
    }
    else if(o instanceof EditText) {
        return ((EditText) o).getText().toString();
    }
    return null;
}

确保基类是最后检查的条件,否则扩展类的代码将无法访问。例如 - 如果您TextInputEditText在条件后检查条件EditText,它将始终为EditText条件返回 true,因此永远不会检查TextInputEditText条件。这是因为TextInputEditText extends EditText.

更新 - 使用instanceof被认为是不好的做法。所以,请改用函数重载。喜欢 -

public String gE(TextInputEditText text) {
    return text.getText().toString();
}

public String gE(BootstrapEditText text) {
    return text.getText().toString();
}

public String gE(EditText text) {
    return text.getText().toString();
}

推荐阅读