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

c++ - 从可维护性的角度来看,当减少公开可见的 API 似乎更可取时,为什么要提倡公共继承?

我正在使用 bada 并参考这里的教程,它开始:

我正在运行我最近删除公共说明符以减少我的公共 API 的代码。您会看到实现这些接口的函数也公开声明,我认为没有必要并将其设为私有。在实现我自己的接口时,我会毫不犹豫地这样做,因为这些接口可能提供比我希望我的具体类的常规客户端接收的更多的访问权限。

将它们公开的原因是什么,我错过了什么?

我想它被提倡以帮助可扩展性,但对于开发应用程序而不是库的开发人员,我会挑战这种智慧。

0 投票
3 回答
464 浏览

java - 解决缺少包访问说明符的方法?

我是 Java 新手。我在尝试构建我的代码时发现,Java 将源文件组织(目录结构)与包结构和包结构与类的外部可见性密切相关(一个类对所有其他包可见,或者不可见)。

这使得在保持良好封装的同时将我的公共库的内部实现细节组织成相关功能的逻辑单元变得相当困难。JSR 294解释得最好:

今天,一个实现可以分成多个包。这种实现的子部分需要更紧密地相互耦合,而不是与周围的软件环境耦合。今天,设计人员被迫将实现的其他子部分所需的程序元素声明为公开的——从而使它们在全球范围内可访问,这显然是次优的。

或者,整个实现可以放在一个单独的包中。这解决了上面的问题,但很笨拙,并且将所有子部分的所有内部都暴露给彼此。

所以我的问题是,这种限制存在哪些解决方法,优缺点是什么?JSR 中提到了两个——使用包进行逻辑分组(违反封装);把所有东西都放在一个包里(笨重)。这些变通办法还有其他优点/缺点吗?还有其他解决方案吗?(我已经模糊地意识到 OSGi 包,但我发现很难理解它们是如何工作的以及可能的优点/缺点是什么(也许这是一个缺点)。与香草包相比,它似乎非常具有侵入性,到开发和部署。

注意:我会投票赞成任何好的答案,但最好的答案将是一个综合考虑其他人的利弊的答案(抄袭!)。

相关(但不重复!)问题

期待“可能重复”的呼喊,这是我在 SO 上发现的类似问题;我将它们呈现在这里以供参考,并解释为什么它们不回答我的问题。

0 投票
1 回答
2120 浏览

yii - yii - 每个控制器可用的变量

我是 yii 的新手。

我在我的网站上使用了超过 1 个控制器,每个控制器几乎没有操作。

我想在每个控制器中使用一些变量(变量的值将是固定的,我需要一些公式的常量)。定义这些变量的最佳位置(标准方式)是什么?我应该使用会话吗?(因为价值不会改变)。

0 投票
1 回答
268 浏览

java - Java 接口的可见性降低,只有 NOT

可能的重复:
在 Java 中实现接口时降低可见性

我一定遗漏了一些明显的东西,但我得到了:

不能降低继承方法的可见性

我不明白怎么做。这是我的界面:

这是我的实现:

类和实现都在同一个包中。有任何想法吗?

0 投票
2 回答
264 浏览

java - 如何创建像 sun.misc* 这样的受限包

我正在开发一个由其他团队使用的库,在库中有一些类/方法是公共的,但我不希望其他人使用它们。

类似于 java 中的 sun.misc 包之类的东西,尽管所有类都是公共的,但编译器在使用它时会抛出“限制错误”。

0 投票
3 回答
9346 浏览

java - 何时在 java 中打包私有(无显式修饰符)?

我一直在阅读教程Controlling Access to Members of a Class。我很困惑什么可能是使用包私有的好用例。因为据我了解,您始终可以将您的包声明更改为此类的任何包声明,并将其视为公共类。我知道这不是一件好事,但什么阻止了我?

0 投票
2 回答
857 浏览

android - 禁用 AsyncTask,使用自定义 AsyncTask

我有以下实现AsyncTask,允许多个AsyncTasks 同时运行:

现在为避免混淆和意外使用 normal AsyncTask,我想阻止从我的代码访问:

  • AsyncTask,只MyAsyncTask应该使用。
  • 中的execute()函数MyAsyncTask

是否有可能做到这一点?

0 投票
1 回答
33266 浏览

c# - 公共类 - “由于其保护级别而无法访问。只能处理公共类型。”

我正在做一个测试项目来了解对象的 XML 序列化,但我遇到了一个奇怪的运行时错误:

该类是公开的 - 我不明白是什么导致了这个错误。任何帮助,将不胜感激。

0 投票
2 回答
679 浏览

windows-runtime - 在 WinRT 中,默认 .Ctor 的可见性是什么?

作为一个例子(以及我提出问题的原因),据我从 ILDASM 显示的 WinMD 信息中可以看出,类 Windows.XAML.Media.Transform 没有定义的构造函数。

但是,如果我尝试从该类派生,在我的 C# 项目中,编译器会抱怨找不到非构造函数。

在我看来,这可能是构造函数隐藏可见性的结果。

在C#中声明私有(或内部)构造函数也可以达到同样的效果,但必须声明,否则编译器会创建公有构造函数,而该类确实是可派生的。

有什么提示吗?

0 投票
3 回答
65257 浏览

java - 默认情况下,Java 和 C++ 中的类是私有的还是公有的?

默认情况下,Java 和 C++ 中的类是私有的还是公有的?