问题标签 [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.
c# - CodeContracts 静态检查表明,尽管使用 InternalVisibleTo,但另一个程序集的内部类的成员不够可见
我正在 Visual Studio 2012 中编写一个程序,并且我在两个单独的项目中有一对类:
项目A:
项目B:
在AssemblyInfo.cs
ProjectB 中,我还有:
这编译得很好,直到我打开 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
,有没有办法解决这个错误?
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
?
java - 不公开子包类的 Java 子包
假设我的根包中有 20 个类。我决定通过在根包下创建 3 个子包来组织这些类。然后我将 5 个类放入每个子包中,在根包中留下 5 个类(因为它们是顶级类)。现在因为我需要使用根包中 5 个类的子包中的类,所以我最终将子包中的类公开,而在子包之前,这些类只在包内公开。
上面的代码组织是在良好的指导下完成的。分包是按功能而不是按层。包之前的相互依赖被最小化。但是,许多子包类仍然可以从更高的级别访问。
是否有解决此类场景的良好做法?
java - 当具有默认访问权限的类包含公共成员时,javac 不会发出警告
关于下面的示例代码,虽然Test类内部的Test()构造函数是public的,但是Test类本身不是public的,所以Test()构造函数不能从它自己的包之外被调用。
这是否会使 public 关键字变得多余?如果是这样,我想知道为什么 javac 在其访问被隐式声明为默认值(“包私有”)的类中使用时不发出关于公共冗余使用的警告?
Test.java,包测试——
Main.java,包 main -
编辑:
需要明确的是:当我编译 Test.java 时,我没有收到任何警告。
java - Java 中包私有类的改进
以我的经验,Java 中类的包私有可见性被证明是多余的。
包私有可见性似乎基于这样一个前提,即一个几乎被另一个类私有使用的类很可能保存在同一个包中。通常情况并非如此。有人在探索改进的访问修饰符/替代机制吗?
尝试使用包私有可见性的问题:
- 我们很想将功能不相关的类放在同一个包中以获得这种好处
使用 public 代替的问题:
- API 被污染。导入库 Jar 后,客户会看到其他几个他无需担心的公共类
- 从编码标准的角度来看,没有简单的方法可以确保开发人员不会在时间紧迫时完成短路调用(短路调用是指绕过层的方法调用(例如从 Servlet 直接到 DAO 绕过豆/BO)
当前的解决方法:
- 为了阻止短路调用,我们通常将应用程序的不同部分打包到几个 JAR 中,并确保每个构建的构建环境中只有相应的 JAR 可用。(例如,在编译 Swing 客户端类时,server.jar 将不可用。只有客户端类和 common.jar 可用。)
问题:
- 想出一个新的可见性修改器/替代方案不是很有用吗?
- 这些方面的东西是否已经在进行中?
- 像 Spring/Guice 这样的框架是否足以替代?
java - Swift 和可见性声明
有人可以举例说明何时建议public
在类中使用修饰符及其属性/方法。
来自 Java 背景,这有点令人困惑,因为 - 如果我没记错的话 - public
Java 中的修饰符的等价物将internal
在 Swift 中。
谢谢!
c# - 类实例创建限制
我有许多实现相同接口的算法类;另一个“工厂”类负责通过配置参数实例化正确的算法类,然后在该实例上调用 start 方法。
我想将算法类的构造函数(或任何其他实例创建机制)的可见性仅限于工厂类。
我该如何解决这个问题?我能想到的唯一干净的解决方案是将这些类移动到不同的 .dll 中并将算法类更改为私有,但这不是我现在想要做的。
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
c# - 我可以将 C# 扩展方法的可见性限制在同一程序集中的类中吗?
假设我有这些文件:
我的代码.cs
其他代码.cs
这两个文件是同一个程序集的一部分。有什么方法可以让 MyCode.cs 可以访问 Foo 而 OtherCode.cs 不能访问?我的问题类似于这个问题: C# Extension Methods only visible and access within one class ("private") 但它接受的答案并不是我真正想要的。我想制作一个仅对我正在处理的代码可见的扩展方法,根据上述问题的答案,有人仍然可以通过添加“使用”语句来访问它。有没有一种方法可以创建一个仅对我的代码可见的扩展方法,而在其他任何地方,甚至同一程序集中的另一个类都不可见?
我问是因为调用扩展方法的语法很方便,并且对我正在处理的工作很有用(否则我只会创建一个私有方法),但我不希望其他人看到它并使用它他们的代码,以防它没有按照他们假设的那样做。并且由于 Visual Studio 的智能感知,我的扩展方法目前显示在可用方法列表中(以及添加它们所在的命名空间的选项)。
c# - 无法将受保护的枚举作为静态方法的参数传递
我一直在更新公司的软件,偶然发现了这个问题。有一个受保护的枚举,我想从该枚举中传递一个值作为静态方法的参数,但我不能导致我无法访问它,即使方法和枚举都在同一个类中。
例子:
我无法将其Car enumValue
用作参数,AMethod
因为我无法访问它。为什么我不能这样做?我的意思是他们在同一个班级。我错过了什么吗?