![](/img/trans.png)
[英]Is there a way to check in Java runtime if an object has a specific method?
[英]Check if object has method in Java?
我对Java的经验并不是很有经验,我知道现在已经足够让我通过了,但我还不完美,所以如果这是一个愚蠢的问题我会道歉。
我正在尝试编写一个可以传递任何类型对象的类,但我需要检查传递的对象是否具有特定的方法。 我该如何测试呢?
我希望这是有道理的。 干杯。
编辑
感谢所有快速回复! 我不太熟悉界面等,所以我不完全确定如何使用它们。 但是,为了更好地了解我正在做的事情,我正在尝试创建一个会影响对象alpha的类,例如ImageView
或TextView
。 如果我只需要确保他们拥有方法.setAlpha()
,我将如何为其创建一个接口,而不单独列出每个对象? 这有意义吗? 干杯。
更好的想法是使用该方法创建一个接口并使其成为参数类型。 传递给您的方法的每个对象都必须实现该接口。
它被称为与客户表达您的合同。 如果您需要这种方法,请说明。
使用Object.getClass()
获取实例的类,然后使用Class.getMethod(String, Class...)
并在类没有该方法时捕获NoSuchMethodException
。
另一方面,这在Java中不是一个很好的实践。 尝试使用接口。
您可以使用Java反射执行此操作。
像object.getClass().getMethods()
这样的东西来获取Method
对象的数组,或者你可以使用getMethod()
来获取具有特定名称的对象(你必须定义参数)。
首先,定义一个接口,该接口将要求实现它的所有对象实现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
}
您可以尝试列出类的方法(例如:FooBar类):
Class fooBar= FooBar.class;
Method[] methods = fooBar.getDeclaredMethods();
if (methods.length == 0){
...
} else{
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.