我对Java的经验并不是很有经验,我现在已经足够了解我,但我还不完美,所以如果这是一个愚蠢的问题我会道歉。
我正在尝试编写一个可以传递任何类型对象的类,但我需要检查传递的对象是否具有特定的方法。我该如何测试呢?
我希望这是有道理的。欢呼声。
修改
感谢所有快速回复!我不太熟悉界面等,所以我不完全确定如何使用它们。但是,为了更好地了解我正在做的事情,我正在尝试创建一个会影响对象alpha的类,例如例如ImageView
或TextView
。如果我只需要确保他们拥有方法.setAlpha()
,我将如何为其创建一个接口,而不单独列出每个对象?这有意义吗?欢呼声。
答案 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{
...
}