gpt4 book ai didi

java - 非公共(public)静态嵌套类?

转载 作者:行者123 更新时间:2023-12-02 05:34:17 24 4
gpt4 key购买 nike

我正在尝试为一段代码编写测试,该代码使用以下对象的内部类作为输入(我已经概括了名称)。

public class MockOuterClass implements OuterClass, Mock {

static class MockInnerClass implements InnerClass {
//fields and methods of the nested class
}

//methods of the outer class
}

现在,由于内部类没有可见性标记,因此它默认为“ protected ”。这就是我的问题:由于我的测试和源代码位于不同的包中,我如何创建这个内部对象的实例?我尝试这样做:

MockOuterClass.MockInnerClass test = new MockOuterClass.MockInnerClass();

当我这样做时,Eclipse 说这一行是 Not Acceptable (我认为是这种情况,但这是一厢情愿的想法),因为 MockInnerClass 默认为 protected,因此不能在其包之外使用。有什么办法可以以某种方式使用这个类吗?我没有编写源代码,所以我不确定内部类上缺少“public”标签是故意的还是程序员的错误。

提前谢谢您。

最佳答案

有点旁白,不是真正的答案,但我总是将测试放入与正在测试的类相同的包中。至少,尽可能地,在极少数情况下这是不可能的。

为什么要使用不同的包?这样做有充分的理由吗?

现在,回到答案,如果您坚持从单独的包进行测试,除非 MockOuterClass 公开了一些方法来构造(或公开)MockInnerClass ,你被卡住了。 (我想您可以尝试使用反射,但这变得令人绝望。)但是,正如一些人评论的那样,该类的作者“打算”隐藏内部类,a。洛杉矶肯特·贝克。

换句话说,如果您关注 Kent Beck,您应该编写针对 MockOuterClass 的测试,而不是 MockInnerClass。内部类是“非公开细节”。

关于java - 非公共(public)静态嵌套类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25168690/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com