2016-02-12 39 views
-3

方法名我有2种方法与名称如何创建“如果条件”的基础上在java中

firstMethod() 
secondMethod() 

我想有一个,如果基于方法名条件。

例如:

if (methodName.contains (firstMethod())) 
{ 

} 
else 
{ 

} 

是否有可能在Java中?

+0

您是否事先知道方法名? – Hackerdarshi

+0

是的,我知道方法名称本身之前[例如,这里firstMethod()和secondMethod()] – user2987894

+2

你想知道如果方法**名称**包含**返回值**的另一种方法?为什么在天堂的名字你想要吗?你可以给我们你的真实世界的用例吗?为什么不使用这个字符串(因为你在编写代码时知道方法名)? –

回答

1

可以使用reflection

基本反射是一种从字符串传递给类,方法,构造函数和反之亦然的机制。

但不清楚你想如何使用它,所以我不知道如何更清楚。

在任何情况下,您需要获得对Method的引用。从类中可以用方法getName作为String获取该方法的名称。

一旦你有字符串,你可以比较他们通常使用字符串方法。

+0

谢谢大家的建议。 – user2987894

0

Class.java有一个方法#getDeclaredMethods它返回一个数组,其中包含Method对象,该对象反映了该类的所有声明方法。 Method类继而具有#getName(),其返回方法名称的String表示。

1

你很可能真的不想这样做。相反,为什么没有你正在调用的方法有一个参数,并指出行为是什么。例如:

void firstMethod() { 
    someMethod(true); 
} 

void secondMethod() { 
    someMethod(false); 
} 

void someMethod(boolean fromFirstMethod) { 
    if (fromFirstMethod) { 
     // some code... 
    } else { 
     // some other code... 
    } 
} 
+0

即使这可能做OP想要的东西,但它仍然是丑陋的。但OP要的就是你的错。 – Tom

+1

是的,赞同它的丑陋,这更多的是试图向OP展示一个简单的替代反射答案,这对于这样一个微不足道的问题来说是无足轻重的。这可以很容易地重构成更好的东西。如果我们有更多的OP代码来将我们的答案建立在战略模式或基本继承可能提供了更优雅的解决方案上。 – ewanc