2011-11-26 101 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