在Java中调用没有名称的函数

时间:2013-10-30 08:35:32

标签: java function

我有一组类似的类,它们都实现了表单

的功能
public static ClassA convertToClassA(Obj A)

public static ClassB convertToClassB(Obj B)

我想遍历一个类列表并调用此函数,该函数在每个类中使用一个Obj参数。如果每个函数的命名方式不同,我该怎么做?

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

Class cls = Class.forName("ClassA");
String methodName = "convertTo" + cls.getSimpleName();
Method method = cls.getDeclaredMethod(methodName, new Class[]{Obj.class});
// If the underlying method is static, then the first parameter is ignored. It may be null as illustrated below. 
method.invoke(null, your_object);

答案 1 :(得分:1)

使用您的方法签名创建公共接口并让您的可调用类实现它,稍后您可以通过接口实例迭代对象并从中调用方法,因此没有问题。 HOWEVER 我开始认为你想调用方法而不知道它的名字是AT ALL - 目标方法的唯一知识就是参数的数量和类型。确实,通过反射确实是不可能的,但如果存在类似的方法签名,它将是无效的。无论如何,不​​知道你想做什么,但是你的项目设计很糟糕(没有接口,我猜的吸气性差等)。

答案 2 :(得分:0)

看一下反射包。它提供了获取实例提供的所有方法的方法。

apache common的BeanUtil(http://commons.apache.org/beanutils)也提供了一些类似的方法。