2016-02-12 53 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