问题标签 [access-levels]

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 投票
3 回答
52 浏览

c# - 我们可以在父类中定义一个可以在子类中调用但不能在另一个子类中调用的方法吗

我遇到了一个问题,我想在父类(A)中有一个方法(M),然后 B 和 C 扩展类 A。在这种情况下,我希望 method(M) 可以被 B 访问,但不能被 C 访问。任何解决方案?

0 投票
2 回答
9635 浏览

php - Why do I get an "Access Level must be protected or weaker" after extending a protected class variable and marking it private?

I get this error:

Fatal error: Access level to GraphController::$repository must be protected or weaker

Why? What's the theory behind this? On some level it feels wrong that I could have a weaker access level to a class property (i.e. public) when I extend a class, because I am in a way exposing a variable that was meant by parent class to be more restricted...

0 投票
3 回答
8996 浏览

swift - 为什么具有协议一致性的扩展不能具有特定的访问级别?

假设我们有以下示例代码:

编译上面的代码会出现以下错误:

错误:“public”修饰符不能与声明协议一致性的扩展一起使用

如果我将扩展名标记为private. 似乎您无法设置符合协议的扩展的访问级别,无论访问级别设置为什么。即使将协议声明设置为publicprivate不会消除错误。

问题

如果扩展符合协议,Swift 以这种方式限制扩展的访问级别的原因是什么?如果在类级别应用协议一致性,则没有这样的限制。

如果我服从编译器并删除private/public指定,访问级别是someFunction()什么?

我想在这种情况下它会遵循原始MyClass实现,public但我不确定。

这种行为是否存在,因为扩展中的协议一致性意味着整个类都符合协议,因此在扩展中重新指定访问级别是多余的?

0 投票
7 回答
8316 浏览

swift - Swift 4 中的私有和文件私有有什么区别

在 Swift 4 中,由于 nowprivate在同一个源代码文件中的扩展中也是可见的,它与fileprivate访问修饰符有何不同?

背景:在 Swift 3 中,类中的私有变量在同一个文件的扩展中是不可见的。为此,fileprivate不得不使用。

0 投票
1 回答
99 浏览

swift - 带有泛型的 Swift 类允许超类不可访问

在 iOS 框架中,如果我使用内部超类创建公共类,则会收到错误消息:

错误:类不能被声明为公共的,因为它的超类是内部的

这是有道理的。但是,如果我做同样的事情但在类声明中使用泛型,则不会显示错误。

这只是一个错误吗?这两个示例实际上都应该给出错误吗?

如果您在项目中包含该框架,则可以Camry很好地使用该类,并且该应用程序将在模拟器和设备上构建和运行。但是,我注意到在某些情况下,如果您尝试使用这些内部泛型类归档应用程序,有时会出现 Mach-O 链接器错误。

架构 arm64 的未定义符号

不过,我还不能确切地确定为什么偶尔会发生这种情况。

编辑:当您在内部类中有公共初始化程序时,会发生链接器错误。因此允许在框架中包含这样的代码:

您可以Camry<Int>(name: "My Camry", wheels: 4)在包含该框架的应用程序中毫无问题地使用,但是当您尝试归档项目时,您会收到链接器错误。

0 投票
1 回答
431 浏览

c# - 为什么我不能从动态对象访问内部/朋友属性?

我将首先展示 VB.NET 代码,因为它的 C# 等价物的行为更加令人困惑(见下文)

考虑以下三个类:

现在,当我尝试做这样的事情时:

我似乎无法访问MyProperty,并且收到以下异常:

未找到类型“DerivedClass1”的公共成员“MyProperty”。

MyProperty因此,当我更改to的访问级别时Public,代码按预期工作。

奇怪的是,当我在 VS 2015 上尝试上述代码的 C# 等效项时,它工作得很好,在 .NET Fiddler 上却不行。

这是 .NET Fiddler 上的 C# 示例,我在其中得到与 VB.NET 相同的行为。

那么,我做错了什么吗?

0 投票
2 回答
2848 浏览

swift - Swift 枚举 case 访问级别

我知道,Swift 不允许在枚举中重新定义案例的访问级别,这意味着以下是不可能的

谁能告诉我为什么不允许这样做?在某些情况下,隐藏枚举的案例并提供初始化此类案例的初始化程序是切实可行的,因此我真的看不出禁止此功能的动机。

编辑:

考虑以下纯功能树结构的示例:

为了更好的运行时间(这在实现自平衡二叉树时是可取的),可能希望将树的高度作为关联值包含在Node案例中。但这会带来封装问题,因为现在人们可能会构建Node具有非法高度的案例。如果可以覆盖案例的访问级别,或者如果允许存储在枚举中的常量,则此问题将得到解决。

0 投票
1 回答
238 浏览

java - 为什么方法的私有访问比包私有更可取?

Java 开发人员总是对在这个类之外不使用的方法使用私有访问级别。这样做有已知的好处,但另一方面我们增加了单元测试的复杂性。在大多数情况下,我们的代码不被任何其他服务/API 使用,我们实际上并不关心“私人”利益。但我相信我们关心的是创建可读的简单单元测试。考虑到这一点,为什么不在默认情况下将类中的所有方法都创建为“包私有”,并且仅在我们真正需要的情况下才将它们设为“私有”?

0 投票
0 回答
182 浏览

vb.net - VB.Net 访问级别

我目前正在做一个 VB.Net 项目,遇到了一些让我有点困惑的事情。所以我基本上有以下代码结构:

现在我从设置mainProtected. 具体来说,我得到的错误是:

现在我用谷歌搜索了这个错误,发现解决方案是:

将变量、过程参数或函数返回的访问级别更改为至少与其数据类型的访问级别一样具有限制性。

所以,我把它改成了Public,一切都很好。但只是为了测试,我改为访问Private,FriendProtected Friend. Protected Friend仍然有我所期望的错误,但两者都Private没有Friend,即使它们的访问级别与数据类型的访问级别不同。

所以我想知道为什么我只会将此对象列为Protected,而不是在任何其他访问级别时才会收到此错误。

0 投票
1 回答
674 浏览

java - Intellij IDEA 为 @Bean 提供“访问可以是私有的”警告

我正在使用最新的 IntelliJ IDEA 免费版本(2018.1 build 2018 年 7 月 11 日)。代码分析给了我一个警告:用@Bean 装饰的方法上的“访问可以是私有的”。

我搜索了这个问题,但所有答案都建议我禁用此检查。

我想知道我是否只能使用@Bean 禁用检查而不是完全禁用?