在Java中,我可以从类对象创建匿名子类的实例吗?

在Java中,我可以从类对象创建匿名子类的实例吗?,java,reflection,mocking,Java,Reflection,Mocking,我有一个工厂方法,可以创建用于单元测试的对象。这些对象都派生自同一基类: public static <T extends BaseEntity> T modMake(Class<T> clazz) { try { return clazz.newInstance(); } catch (InstantiationException e) { // Should never happen throw new

我有一个工厂方法,可以创建用于单元测试的对象。这些对象都派生自同一基类:

public static <T extends BaseEntity> T modMake(Class<T> clazz)
{
    try {
        return clazz.newInstance();
    } catch (InstantiationException e) {
        // Should never happen
        throw new AssertionError(e);
    } catch (IllegalAccessException e) {
        // Should never happen
        throw new AssertionError(e);
    }
}

我也可以在函数中使用
参数来实现这一点吗?

我认为没有任何方法可以实现这一点。如果你真的需要走这条路,你可能需要研究字节码操纵器。Javassist和BCEL是两种选择。

放弃工厂方法,使用类似模拟API的方法来实现所描述的行为

然后,您的代码将以如下方式结束:

long returnValue = 12;

Node nodeMock = createMock(Node.class);
expect(nodeMock.ixGet()).andReturn(returnValue);
replay(nodeMock);

//add test code here

verify(nodeMock);
回答汉诺关于这是如何工作的问题:

这取决于模拟是一个接口还是一个类

接口的情况很简单(代码方面),它使用所谓的动态代理,这是核心Java的一部分

在这个类中,它正在执行@Jonathan在回答中提到的字节码操作,就在一个漂亮的API后面


上述两种机制都允许拦截方法调用,并根据您设置的期望进行简单响应。

。我还没有像这样使用Java。我现在实际使用的是EasyMock,而且它非常棒。谢谢
long returnValue = 12;

Node nodeMock = createMock(Node.class);
expect(nodeMock.ixGet()).andReturn(returnValue);
replay(nodeMock);

//add test code here

verify(nodeMock);