繁体   English   中英

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

[英]Check if object has method in Java?

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

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

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

编辑

感谢所有快速回复! 我不太熟悉界面等,所以我不完全确定如何使用它们。 但是,为了更好地了解我正在做的事情,我正在尝试创建一个会影响对象alpha的类,例如ImageViewTextView 如果我只需要确保他们拥有方法.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM