问题标签 [class-visibility]

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 投票
1 回答
352 浏览

c# - CodeContracts 静态检查表明,尽管使用 InternalVisibleTo,但另一个程序集的内部类的成员不够可见

我正在 Visual Studio 2012 中编写一个程序,并且我在两个单独的项目中有一对类:

项目A:

项目B:

AssemblyInfo.csProjectB 中,我还有:

这编译得很好,直到我打开 CodeContract 静态分析。此时,我从 ccrewrite: 收到错误消息Member 'Test.B.X' has less visibility than the enclosing method Test.A.#ctor(Test.B)

我能想到的唯一可能导致问题的是 CodeContracts 不知道 ProjectA 可以看到 ProjectB 的内部,因此认为B在这种情况下 class 的可见性基本上是没有的。虽然如果我将断言更改为b != null,它似乎没问题,所以也许这个论点不成立。

任何人都可以确认这个断言,或者给我一个正确的解释,并且没有删除Requires、关闭 CodeContracts 或更改 的可见性B,有没有办法解决这个错误?

0 投票
2 回答
672 浏览

java - Eclipse - 我想从同一个包但在不同的项目下访问一个类,如何?

我为我的 Java 项目使用 Eclipse IDE,我所有的项目(Project_1等等Project_2)相关的类都在一个包package_name中。

我目前正在学习 2 个课程。

class_name.java( Project_2/ package_name)

utility.java( Project_1/ package_name)

所有方法都是public. 如何使用 in 中的utility.java方法class_name.java

0 投票
1 回答
528 浏览

java - 不公开子包类的 Java 子包

假设我的根包中有 20 个类。我决定通过在根包下创建 3 个子包来组织这些类。然后我将 5 个类放入每个子包中,在根包中留下 5 个类(因为它们是顶级类)。现在因为我需要使用根包中 5 个类的子包中的类,所以我最终将子包中的类公开,而在子包之前,这些类只在包内公开。

上面的代码组织是在良好的指导下完成的。分包是按功能而不是按层。包之前的相互依赖被最小化。但是,许多子包类仍然可以从更高的级别访问。

是否有解决此类场景的良好做法?

0 投票
1 回答
69 浏览

java - 当具有默认访问权限的类包含公共成员时,javac 不会发出警告

关于下面的示例代码,虽然Test类内部的Test()构造函数是public的,但是Test类本身不是public的,所以Test()构造函数不能从它自己的包之外被调用。

这是否会使 public 关键字变得多余?如果是这样,我想知道为什么 javac 在其访问被隐式声明为默认值(“包私有”)的类中使用时不发出关于公共冗余使用的警告?

Test.java,包测试——

Main.java,包 main -

编辑:

需要明确的是:当我编译 Test.java 时,我没有收到任何警告。

0 投票
2 回答
386 浏览

java - Java 中包私有类的改进

以我的经验,Java 中类的包私有可见性被证明是多余的。

包私有可见性似乎基于这样一个前提,即一个几乎被另一个类私有使用的类很可能保存在同一个包中。通常情况并非如此。有人在探索改进的访问修饰符/替代机制吗?

尝试使用包私有可见性的问题:

  • 我们很想将功能不相关的类放在同一个包中以获得这种好处

使用 public 代替的问题:

  • API 被污染。导入库 Jar 后,客户会看到其他几个他无需担心的公共类
  • 从编码标准的角度来看,没有简单的方法可以确保开发人员不会在时间紧迫时完成短路调用(短路调用是指绕过层的方法调用(例如从 Servlet 直接到 DAO 绕过豆/BO)

当前的解决方法:

  • 为了阻止短路调用,我们通常将应用程序的不同部分打包到几个 JAR 中,并确保每个构建的构建环境中只有相应的 JAR 可用。(例如,在编译 Swing 客户端类时,server.jar 将不可用。只有客户端类和 common.jar 可用。)

问题:

  1. 想出一个新的可见性修改器/替代方案不是很有用吗?
  2. 这些方面的东西是否已经在进行中?
  3. 像 Spring/Guice 这样的框架是否足以替代?
0 投票
1 回答
710 浏览

java - Swift 和可见性声明

有人可以举例说明何时建议public在类中使用修饰符及其属性/方法。

来自 Java 背景,这有点令人困惑,因为 - 如果我没记错的话 - publicJava 中的修饰符的等价物将internal在 Swift 中。

谢谢!

0 投票
2 回答
406 浏览

c# - 类实例创建限制

我有许多实现相同接口的算法类;另一个“工厂”类负责通过配置参数实例化正确的算法类,然后在该实例上调用 start 方法。

我想将算法类的构造函数(或任何其他实例创建机制)的可见性仅限于工厂类。

我该如何解决这个问题?我能想到的唯一干净的解决方案是将这些类移动到不同的 .dll 中并将算法类更改为私有,但这不是我现在想要做的。

0 投票
2 回答
643 浏览

java - 为什么 java.io.Bits 不公开?

我在 Java 中使用 IO 做了很多工作,在寻找将原语转换为字节数组并返回的代码之后,我java.io.Bits在 Java 源代码托管网站之一上找到了源代码。快速浏览后,我意识到这正是我需要的,除了它是包私有的。所以我制作了一份我公开的副本,存储在我的项目包中并使用(我向你保证,只在个人项目中)。我觉得它非常有用。

我的问题是,为什么这个包是私有的?我可以看到它对于使用 IO 的人非常有用,而且我认为将其更改为公共的可见性(在 rt.jar 中)没有任何缺点。或者是否有等价物(请不要提及其他库)?

这是一个随机选择的网站的链接,该网站具有 Java 源代码:http java.io.Bits: //grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/io/Bits.java

0 投票
4 回答
2563 浏览

c# - 我可以将 C# 扩展方法的可见性限制在同一程序集中的类中吗?

假设我有这些文件:

我的代码.cs

其他代码.cs

这两个文件是同一个程序集的一部分。有什么方法可以让 MyCode.cs 可以访问 Foo 而 OtherCode.cs 不能访问?我的问题类似于这个问题: C# Extension Methods only visible and access within one class ("private") 但它接受的答案并不是我真正想要的。我想制作一个仅对我正在处理的代码可见的扩展方法,根据上述问题的答案,有人仍然可以通过添加“使用”语句来访问它。有没有一种方法可以创建一个仅对我的代码可见的扩展方法,而在其他任何地方,甚至同一程序集中的另一个类都不可见?

我问是因为调用扩展方法的语法很方便,并且对我正在处理的工作很有用(否则我只会创建一个私有方法),但我不希望其他人看到它并使用它他们的代码,以防它没有按照他们假设的那样做。并且由于 Visual Studio 的智能感知,我的扩展方法目前显示在可用方法列表中(以及添加它们所在的命名空间的选项)。

0 投票
1 回答
768 浏览

c# - 无法将受保护的枚举作为静态方法的参数传递

我一直在更新公司的软件,偶然发现了这个问题。有一个受保护的枚举,我想从该枚举中传递一个值作为静态方法的参数,但我不能导致我无法访问它,即使方法和枚举都在同一个类中。

例子:

我无法将其Car enumValue用作参数,AMethod因为我无法访问它。为什么我不能这样做?我的意思是他们在同一个班级。我错过了什么吗?