问题标签 [package-private]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
7522 浏览

java - 为什么 JUnit 5 默认访问修饰符更改为 package-private

为什么 JUnit 5 package-private 中的默认访问修饰符是?

JUnit 4 中的测试必须是公开的。

将其更改为包私有有什么好处?

0 投票
1 回答
687 浏览

java - Lombok 构建器包范围

我想使用Lombokpackage-scope生成构建器,但我不确定它是否可能(我在文档中没有找到任何线索)。

默认情况下,Lombok 会生成生成public器,即此代码:

被翻译成这样:

public没有这个前导关键字有没有办法生成构建器类?

0 投票
0 回答
58 浏览

java - 当父类是包私有并且来自另一个模块时,javadoc生成“扩展对象”而不是真正的类

我的文件结构。我有两个相邻的目录。模块 1 和模块 2。

模块1:

src\hu\package1\TestPackagePrivateClass.java:

src\hu\package1\PackagePrivateClass2.java:

src\hu\package1\TestPublicClass.java:

所以2个抽象包私有类和1个公共抽象类。

模块2:

src\hu\package1\TestChildClass.java:

src\hu\package1\TestChildClass2.java:

src\hu\package2\ThirdChildClass.java:

因此,我运行以下 2 个命令...模块 1 中的第一个 2 和模块 2 中的第二个 2:

一切正常,没有警告,没有错误。

但是我的问题是,在专门为 TestChildClass 为 module2 生成的 javadoc 中,它显示它是从 Object 扩展的,而不是从 TestPackagePrivateClass 扩展的。然而,getPackagePrivateClass2 的返回类型完美显示。请注意,对于从 module1 扩展 TestPublicClass 的 TestChildClass2,父类是正确的。

因此,当它来自另一个模块并且它不是公共的时,似乎 javadoc 没有显示父类。有解决方案吗?

0 投票
4 回答
1413 浏览

java - Java中包可见性的继承

我正在寻找以下行为的解释:

  • 我有 6 个类,{aA,bB,cC,aD,bE,cF},每个类都有一个包可见 m() 方法来写出类名。
  • 我有一个 a.Main 类,它有一个对这些类进行一些测试的 main 方法。
  • 输出似乎没有遵循正确的继承规则。

以下是课程:

主要课程在package a

这是输出:

这是我的问题:

1)我知道D.m()hides A.m(),但是演员A应该暴露 hiddenm()方法,这是真的吗?还是尽管打破了继承链,但还是会被D.m()覆盖?A.m()B.m()C.m()

2)更糟糕的是,下面的代码显示了覆盖效果,为什么?

为什么不在这部分:

和这个?

我正在使用 OpenJDK javac 11.0.2。


编辑:第一个问题由如何覆盖具有默认(包)可见性范围的方法来回答?

在类 D 中声明或继承的实例方法 mD,从 D 覆盖在类 A 中声明的另一个方法 mA,如果以下所有条件都为真:

  • A 是 D 的超类。
  • D 不继承 mA(因为跨越封装边界)
  • mD 的签名是 mA 签名的子签名(第 8.4.2 节)。
  • 以下情况之一是正确的:[...]
    • mA 在与 D 相同的包中声明为具有包访问权限(本例),并且 D 声明 mD 或 mA 是 D 的直接超类的成员。 [...]

但是:第二个问题仍未解决。

0 投票
2 回答
1786 浏览

unit-testing - 我怎样才能只开课来测试课?

我主要是一名 Java 开发人员,在 kotlin 中编写单元测试时对结构感到好奇,

假设在 kotlin 中没有包私有

private限制对文件的可见性

internal限制对模块的可见性

我怎样才能只开课来测试课?

我必须在 kotlin 类中编写测试还是对所有模块(内部)开放类?

只为单元测试打开方法的 kotlin 方法是什么?

编辑

在@bentolor 的kotlin 讨论中发现了类似的问题/请求:

我应该如何正确进行单元/白盒测试?我想编写测试代码来测试类内部功能,我不想将其暴露给除我的测试类之外的其他类。

包保护的可见性是实现这一目标的绝佳方式。而 Kotlin 现在要求我将这些方法有效地公开,并在整个项目中散布组件的可见 API,以便能够测试它们。

在我看来,内部或多或少是公开的,因为它的范围要大得多。大多数项目都有。大约 1 - 5 个 Kotlin 意义上的“模块”。

在这里非常强烈地要求/倡导本地包的可见性。

0 投票
1 回答
175 浏览

javascript - Javascript:在内部导出模块内部的东西

在 Java 中,我们有 4 个可见性级别。除了publicand private,我们还有protected一个级别和一个默认级别(没有修饰符),也称为 "package-local" 或 "package-private"

修饰符 班级 包裹 子类 世界
上市
受保护 X
没有修饰符 X X
私人的 X X X

见:https ://www.programcreek.com/2011/11/java-access-level-public-protected-private/


我特别需要 Javascript 中的这种“包私有”级别。Javascript模块有类似的方法吗?

我正在编写一个库(NPM包),我想要export一些东西(function,class等),但不在模块的公共 API 中(供库的消费者使用)。只是在我的模块文件之间本地使用。

0 投票
1 回答
79 浏览

java - 如何在 ViewModel android 中使用 mBagOfTags?

我有实现 Closeable 接口的对象,并且希望在我的 ViewModel 清晰时调用 close() 方法。我知道要实现 ViewModel 的 onCleared 方法,但我想在 ViewModel 中使用 mBagOfTags。mBagOfTags 处理可关闭对象(在 clear 方法中调用 close 方法)并且不想在 ViewModel 中创建新的地图对象。如何使用 ViewModel 的 mBagOfTags ?

ViewModel 中的 mBagOfTags 及其成员函数是包私有访问修饰符。

这是android团队开发的ViewModel类。

我的 ViewModel 在另一个包中。