问题标签 [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 投票
4 回答
3906 浏览

java - 外部类访问包私有方法

假设我的包中有一个类,org.jake并且它有一个具有默认访问权限的方法(无修饰符)。然后该方法仅在包内可见。

但是,当有人收到我的框架的 jar 时,是什么阻止他们编写新类,将其包声明为org.jake,并使用我所谓的不可见方法?

换句话说,我能做些什么来防止这种情况发生吗?

0 投票
2 回答
1980 浏览

java - 为什么我无法访问 android.widget 包中的包私有字段?

我正在尝试覆盖 Android View 类以稍微调整功能。但是我需要修改一个没有setter方法的字段。我已将子类放在一个名为android.widget. 为什么我不能访问任何包私有成员字段?我注意到编译器说它们“无法解决”,而不是无法访问。这是否与 Android.jar 的构建方式有关?

0 投票
2 回答
9577 浏览

c# - 为什么 C# 没有包私有?

我正在学习 C# 并且来自 Java 世界,看到 C# 没有“私有包”我有点困惑。我看到的关于这方面的大多数评论都是“你不能这样做;语言不是这样设计的”。我还看到了一些变通方法,这些变通方法涉及internalpartial伴随着评论说这些变通方法违背了语言的设计。

为什么 C# 是这样设计的?另外,我将如何执行以下操作:我有一个Product班级和一个ProductInstance班级。我想要创建的唯一方法ProductInstance是通过Product类中的工厂方法。在 Java 中,我会放入ProductInstance与 相同的包Product,但创建它的构造函数package private,以便只能Product访问它。这样,任何想要创建的人ProductInstance都只能通过Product类中的工厂方法来创建。我将如何在 C# 中完成同样的事情?

0 投票
5 回答
2665 浏览

java - 在方法签名中公开声明包私有类型

这在 Java 中是可能的:

那么,Java 编译器让我将getY()方法声明为的充分理由是public什么?困扰我的是:该类Y是包私有的,但访问器getY()在其方法签名中声明了它。但是在x包之外,我只能将方法的结果分配给Object

好的。现在我可以尝试编造一个例子,用方法结果协方差来解释这个例子。但更糟糕的是,我也可以这样做:

现在我再也不能getY(Y result)x包裹外面打电话了。为什么我可以这样做?为什么编译器让我以我无法调用的方式声明一个方法?

0 投票
7 回答
76175 浏览

java - “包私有”成员访问不是默认(无修饰符)访问的同义词吗?

我对某些文档使用的术语“包私有”以及“默认访问”的使用感到有些困惑。包私有和默认访问不是受保护的同义词吗?

0 投票
8 回答
40237 浏览

java - 在 Java 中封装私有类的优缺点?

我最近在学习 Java,遇到了package-private类的概念,如果我们不指定任何内容,这是默认的。但后来我意识到:

  1. 我很少看到使用包私有类。这是否有原因,例如,它有严重的缺点,它是多余的,或者只是我没有阅读足够的内容?是否有强烈的论据支持/反对它的使用?

  2. 如果它在大多数情况下真的没有用,为什么它会成为默认值?

  3. 在现实世界中我们应该在什么情况下使用包私有?即,它什么时候会变得不可替代?

换句话说,默认 package-private 修饰符的主要优点和缺点是什么?

0 投票
2 回答
16825 浏览

java - 为什么枚举可以有包私有构造函数?

既然枚举构造函数只能由其常量调用,那么为什么允许它是包私有的呢?

0 投票
2 回答
242 浏览

java - 包私有可见性语义是在哪一年引入 java 语言的?

我可以回答类似问题的最佳方式是什么?

(Java 是哪一年引入的特性 XXX?)

我已经阅读了有关 java 版本历史的 wiki,但它的粒度太粗了。

谢谢!

0 投票
2 回答
1971 浏览

java - 如何在 Java 中的两个包之间共享包私有数据?

我有 2 个 Java 包,A 和 B。假设包 B 中的某些类想要使用包 A 中的某些类,但是,当开发人员出现并开发包 C(或者说,应用程序 C)时,他/她将使用我的包 B,但我希望他/她能够使用 B 正在使用的 A 中的类。也就是说,我希望我在包 A 中的类是包私有的,以便对应用程序开发人员隐藏它们。但是,我确实希望我自己的包 B 能够访问那些包私有的类。这可以用Java完成吗?我是否基本上只需要硬着头皮将课程公开并希望用户不要尝试使用它们?或者,我是否需要在 B 中复制 A 中的类?

我的偏好不会是hack-y(即我不想使用反射)。帮助?

0 投票
2 回答
858 浏览

java - 有没有办法将包私有类传递给静态方法

我想知道是否有办法从另一个以包私有类作为参数的包中调用静态方法?这是将 MessagePackagePrivate 类移动到另一个 .java 文件并将其公开的唯一方法吗?如果我不这样做,它会给出这个错误:“MessagePackagePrivate 类型不可见”,这是正常的。

因此,如果是这种情况,即使您的类公开了要公开使用的静态方法,如果不在同一个包中调用该类,也不能使用该类?

这是代码片段:

主类.java

ClassB.java