5

我对 Java 的经验并不是很丰富,我现在知道的足以让我通过,但我还不完美,所以如果这是一个愚蠢的问题,我深表歉意。

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

我希望这是有道理的。干杯。

编辑

感谢所有快速回复!我对接口等不太熟悉,所以我不完全确定如何使用它们。但是,为了更好地了解我在做什么,我正在尝试创建一个会影响一个对象的 alpha 的类,例如,ImageView或者一个TextView实例。当我只需要确保它们具有方法时,我将如何为此创建一个接口,而不单独列出每个对象.setAlpha()?这有意义吗?干杯。

4

5 回答 5

14

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

这叫做与客户表达你的合同。如果您需要该方法,请说出来。

于 2012-05-26T23:32:19.137 回答
8

使用获取实例的类Object.getClass(),然后使用Class.getMethod(String, Class...)并捕获 aNoSuchMethodException如果该类没有该方法。

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

于 2012-05-26T23:31:57.580 回答
3

您可以使用 Java 反射来做到这一点。

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

于 2012-05-26T23:32:55.113 回答
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
}
于 2012-05-26T23:42:17.543 回答
0

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

Class fooBar= FooBar.class;
Method[] methods = fooBar.getDeclaredMethods();
if (methods.length == 0){
...
} else{
...
}
于 2012-05-26T23:34:59.953 回答