我想使用Powermock(基于EasyMock)模拟私有静态内部类。这不是来自生产代码,这只是一个是否可能的问题。我很确定这是一个糟糕的设计,但这是我为科学而努力的东西。
假设我们有一个具有静态私有内部类的类:
public class Final {
private static class Inner {
private final int method () { return 5; }
}
public int callInnerClassMethod () {
return new Inner().method();
}
}
Class<?> innerType = Whitebox.getInnerClassType(Final.class, "Inner");
Object innerTypeMock = PowerMock.createMock(innerType);
PowerMock.expectNew(innerType).andReturn(innerType);
PowerMock.expectPrivate(innerType, "method").andReturn(42);
PowerMock.replay(innerTypeMock);
new Final().callInnerClassMethod();
IExpectationSetters中的andReturn(capture)不能应用于(java.lang.Object)
私人静态内部阶级的嘲笑甚至可能吗?我还没有在SO上找到一个明确的代码示例。
我通过在代码中使用裸类innerType=...
而不是类
innerType=...
来解决编译错误。感觉不对,但管用。如果有人解释一下这个区别,以及如何在最初的例子中使其工作,我会很感激的。我还在一些地方混合了innertype
和innertypeMock
。完整的工作测试代码如下所示:
Class innerType = Whitebox.getInnerClassType(Final.class, "Inner");
Object innerTypeMock = PowerMock.createMock(innerType);
PowerMock.expectNew(innerType).andReturn(innerTypeMock);
PowerMock.expectPrivate(innerTypeMock, "method").andReturn(42);
PowerMock.replayAll();
System.out.println(""+new Final().callInnerClassMethod());
静态内部类是指使用 static 修饰的内部类。示例代码如下: 上述示例中的 Inner 类就是静态内部类。静态内部类有如下特点。 1) 在创建静态内部类的实例时,不需要创建外部类的实例。 2) 静态内部类中可以定义静态成员和实例成员。外部类以外的其他类需要通过完整的类名访问静态内部类中的静态成员,如果要访问静态内部类中的实例成员,则需要通过静态内部类的实例。 3) 静态内部类可以直接访问外部类的
我正在装一个应用程序,它工作得很好。但当我使用 在OuterClass中,并通过
问题内容: 静态和非静态嵌套类有什么区别? 问题答案: 根据定义,内部类不能是静态的,因此我将重述您的问题为“静态和非静态嵌套类之间有什么区别?” 非静态嵌套类具有对其嵌套的类的成员的完全访问权。静态嵌套类没有对嵌套实例的引用,因此静态嵌套类无法调用非静态方法或访问嵌套该类的实例的非静态字段。
问题内容: 如果存在Kotlin语言,可以用什么替代方法?如果没有,当我需要在Kotlin中使用时如何解决此问题?请参见下面的代码示例: 我搜索了很多东西,没有发现任何东西,非常感谢。 问题答案: 只需在Kotlin中省略。 内部类(持有对外部对象的引用) Java: 科特林: 静态内部类又称为嵌套类(不引用外部对象) Java: 科特林:
如何验证是否调用了私有嵌套类的非静态方法?这就是我目前的情况: 我明白了: 更新1: @丹尼斯,我试过以下方法,不过我得到了一个。我想根据JVM中已经存在的单例验证方法的运行,而不是创建它的新实例(正如我在下面的代码中所做的那样),以便调用方法。我尝试调用,但没有成功。有没有一种方法可以使用外部类的运行实例上的反射来验证jmockit中对私有嵌套类中非静态方法的调用(通过调用)? 更新2: 尝试获
我知道这个问题有点简单,但我真的想知道为什么不去留档,假设我有这样的课。 } 两个静态方法都抛出一个错误,指出 修饰符“静态”仅允许在常量变量声明中使用 我知道医生说 这在Java语言规范部分§8.1.3中有描述 8.1.3内部类和封闭实例 但我的问题是,调用简单值或属性与调用静态方法(无论是公共方法还是私有方法)有什么区别?。为什么可以调用属性,但不能调用方法。 谢谢