【发布时间】:2013-12-18 07:48:41
【问题描述】:
我问这个问题是因为我相信他们这样做是有充分理由的,而且大多数人都没有正确使用它,无论如何,从我迄今为止的行业经验来看。但如果我的理论是正确的,那么我不确定他们为什么包含私有访问修饰符......?
我相信,如果正确使用默认访问,它可以在保持封装性的同时提供增强的可测试性。而且它还使私有访问修饰符变得多余。
默认访问修饰符可用于通过对需要对世界其他地方隐藏的方法使用唯一的包来提供相同的效果,并且它在不影响可测试性的情况下做到这一点,就像测试文件夹中的包一样,同样能够访问源文件夹中声明的所有默认方法。
我相信这就是 Java 使用包访问作为“默认”的原因。但我不确定为什么它们还包括私有访问,我确定有一个有效的用例......
【问题讨论】:
-
当类具有其他类不得触及的内部方法时,私有是关键。我不确定这有什么争议。你是在暗示私人没有目的吗?!在这种情况下,我强烈反对
-
在尝试轻松测试私有方法时出现问题,您可以通过创建另一个包来实现使用默认访问的私有成员的效果。
-
是的,但是那些需要对一些密切相关的类而不是整个世界都可以访问的方法呢?此外,您似乎试图通过丢弃包访问来模拟私有。
-
当然,您可以通过创建另一个包来包含该类来实现这一点,即使使用默认访问级别成员,也可以将其与世界隔离,因此包含私有方法和成员的类 X 将变为默认为 YX级别方法和成员。
-
我的理解是 Y.X 是一个完全独立于 Y 的包(除了按照约定它们是相关的),包访问 Y.X 不能从 Y 访问,反之亦然
标签: java unit-testing encapsulation access-modifiers testability