2011-11-26 80 views
-1

我甚至不知道這是可能的,但我想出了這個主意,因爲這個問題:Change private static final field using Java reflection如何注入方法的返回值?

所以這是該方案:

public static String test() { 
    return "test test test"; 
} 

我想這樣做,讓什麼test()方法返回「工作」而不是「測試測試」。 有沒有人有一個想法如何做到這一點?

編輯:
我下載powermock並試圖這樣:

package test;

import org.powermock.api.easymock.PowerMock;

public class InjectorTest {

public static void main(final String[] args) { 
    System.out.println("Before the injection:"); 
    System.out.println(test()); 

    PowerMock.mockStatic(InjectorTest.class); 
    PowerMock.doReturn("worked").when(InjectorTest.class, "test"); 

    System.out.println("After the injection:"); 
    System.out.println(test()); 
} 

public static String test() { 
    return "did not work :("; 
} 

}



但是Eclipse給出了這樣的錯誤:該方法doReturn(字符串)是未定義的類型PowerMock
我下載了錯誤的代碼還是代碼錯誤?

因爲我不想要更多的投票權,爲什麼我想這樣做?
我想以這種方式注入Minecraft,它不使用user.home而是使用相對URI。
這樣,我可以做一個預安裝便攜的Minecraft一個USB記憶棒的學校:d

+3

你爲什麼要這麼做? – Mat

+1

你應該多說一點,你爲什麼要這麼做,在什麼情況下...... – 2011-11-26 14:05:50

+2

你引用的問題是一個完全不同的問題 - 它處理的是改變_field_的價值,你問的是更改從方法返回的值。我不認爲它可以用反射來完成,但它應該可以用字節碼操作。再次,爲什麼?你爲什麼想要做這樣的事情?只需覆蓋該方法。 –

回答

3

我覺得PowerMock可以做到這一點。 (引擎蓋下Java反射)

隨着PowerMock,你的代碼應該是這樣的:

public static void main(String[] args) { 
    PowerMock.mockStatic(Foo.class); 
    PowerMock.doReturn("worked").when(Foo.class, "test"); 
    System.out.println(Foo.test()); 
} 

貸@RC代碼上面

+3

我可以確認'PowerMock.mockStatic(Foo.class); PowerMock.doReturn(「working」)。when(Foo.class,「test」);' – 2011-11-26 14:08:38