检查对象是否在Java中有方法?

时间:2012-05-26 23:30:11

标签: java android reflection methods

我对Java的经验并不是很有经验,我现在已经足够了解我,但我还不完美,所以如果这是一个愚蠢的问题我会道歉。

我正在尝试编写一个可以传递任何类型对象的类,但我需要检查传递的对象是否具有特定的方法。我该如何测试呢?

我希望这是有道理的。欢呼声。

修改

感谢所有快速回复!我不太熟悉界面等,所以我不完全确定如何使用它们。但是,为了更好地了解我正在做的事情,我正在尝试创建一个会影响对象alpha的类,例如例如ImageViewTextView。如果我只需要确保他们拥有方法.setAlpha(),我将如何为其创建一个接口,而不单独列出每个对象?这有意义吗?欢呼声。

5 个答案:

答案 0 :(得分:14)

更好的想法是使用该方法创建接口并使其成为参数类型。传递给您方法的每个对象都必须实现该接口。

它被称为与客户表达您的合同。如果您需要该方法,请说明。

答案 1 :(得分:7)

使用Object.getClass()获取实例的类,然后使用Class.getMethod(String, Class...)并在类没有该方法时捕获NoSuchMethodException

另一方面,这在Java中不是很好的做法。请尝试使用接口。

答案 2 :(得分:3)

您可以使用Java反射来完成此操作。

类似于object.getClass().getMethods()来获取Method个对象的数组,或者您可以使用getMethod()来获取具有特定名称的对象(您必须定义参数)。

答案 3 :(得分:2)

首先,定义一个接口,该接口将要求实现它的所有对象实现setAlpha()方法:

public interface AlphaChanger {
    public void setAlpha(int alpha); // concrete classes must implement this
}

然后,定义实现此接口的类:

public class Thing implements AlphaChanger {
    public void setAlpha(int alpha) { // must be present
        // implementation
    }
}

现在您可以要求传递给您的方法的所有对象必须实现AlphaChanger接口:

public void yourMethod(AlphaChanger changer) {
    changer.setAlpha(10); // you know for sure the method exists
}

答案 4 :(得分:0)

您可以尝试列出类的方法(例如:FooBar类):

Class fooBar= FooBar.class;
Method[] methods = fooBar.getDeclaredMethods();
if (methods.length == 0){
...
} else{
...
}