如何检查Java类中是否包含特定方法?

我有一个不断变化的xml模式(使用trang自动生成)。这些更改不是很详尽。从此架构中仅添加或删除一些元素。通过这种模式,我正在生成Java类(使用cxf),通过它们我将解组xml文档。

随着模式的更改,我的自动生成的Java类也会更改。同样,与模式一样,java类中的更改不是很大。例如,如果将元素say

elemA添加到架构;一些相关的功能说了getElemA()setElemA()并添加到自动生成的java类中。

现在,如何确定这些自动生成的类中是否存在特定功能?一种解决方案是手写模式,以便覆盖xml的所有可能元素。这就是我最终要做的。但是目前,我还没有修复xml文件的格式。

更新:

getElemA()可能在自动生成的类中定义方法。我无法控制这些类的自动生成。但是在我的主类中,如果有以下代码,

If method getElemA exists then 

ElemA elemA = getElemA()

该代码将始终存在于我的主类中。如果方法getElemA()是在自动生成的类之一中生成的,则没有问题。但是,如果未生成此方法,则编译器会抱怨该方法在任何类中都不存在。

有什么方法可以使编译器在编译时不抱怨此功能?

回答:

@missingfaktor提到了一种方法,下面是另一种方法(如果您知道api的名称和参数)。

假设您有一种不带参数的方法:

Method methodToFind = null;

try {

methodToFind = YouClassName.class.getMethod("myMethodToFind", (Class<?>[]) null);

} catch (NoSuchMethodException | SecurityException e) {

// Your exception handling goes here

}

调用它(如果存在):

if(methodToFind == null) {

// Method not found.

} else {

// Method found. You can invoke the method like

methodToFind.invoke(<object_on_which_to_call_the_method>, (Object[]) null);

}

假设您有一种采用本地int参数的方法:

Method methodToFind = null;

methodToFind = YouClassName.class.getMethod("myMethodToFind", new Class[] { int.class });

调用它(如果存在):

if(methodToFind == null) {

// Method not found.

} else {

// Method found. You can invoke the method like

methodToFind.invoke(<object_on_which_to_call_the_method>, invoke(this,

Integer.valueOf(10)));

}

假设您有一种采用盒装Integer参数的方法:

Method methodToFind = null;

methodToFind = YouClassName.class.getMethod("myMethodToFind", new Class[] { Integer.class });

调用它(如果存在):

if(methodToFind == null) {

// Method not found.

} else {

// Method found. You can invoke the method like

methodToFind.invoke(<object_on_which_to_call_the_method>, invoke(this,

Integer.valueOf(10)));

}

使用上述soln调用方法不会给您带来编译错误。按照@Foumpie更新

以上是 如何检查Java类中是否包含特定方法? 的全部内容, 来源链接: utcz.com/qa/407212.html

回到顶部