问题标签 [nested-class]

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 投票
10 回答
4820 浏览

c++ - 在这种情况下我应该使用嵌套类吗?

我正在研究一组用于视频播放和录制的类。我有一个主类,它的作用类似于公共接口,具有类似、、、等的方法......play()然后我有主力类,它们执行视频解码和视频编码。stop()pause()record()

我刚刚了解了 C++ 中嵌套类的存在,我很想知道程序员对使用它们的看法。我有点警惕,不确定有什么好处/缺点,但它们似乎(根据我正在阅读的书)可用于我的情况。

这本书建议在像我这样的场景中,一个好的解决方案是将主力类嵌套在接口类中,因此对于客户端不打算使用的类没有单独的文件,并避免任何可能的命名冲突?我不知道这些理由。嵌套类对我来说是一个新概念。只是想看看程序员对这个问题的看法。

0 投票
6 回答
8742 浏览

c# - 为什么一个类不能在 C# 中扩展它自己的嵌套类?

例如:

从编译器生成此错误:

涉及“A”和“AB”的循环基类依赖

我一直认为嵌套类的行为就像一个普通类,除了关于访问外部类的私有成员的特殊规则,但我猜这两个类之间发生了一些隐式继承?

0 投票
6 回答
6203 浏览

c# - “公共”嵌套类与否

假设我有一个类“应用程序”。为了被初始化,它需要在构造函数中进行某些设置。让我们还假设设置的数量如此之多,以至于将它们放在自己的类中是令人信服的。

比较此方案的以下两种实现。

实施1:

实施2:

对我来说,第二种方法非常可取。它更具可读性,因为它强烈强调了两个类之间的关系。当我编写代码以在任何地方实例化 Application 类时,第二种方法看起来会更漂亮。

现在想象一下,Settings 类本身又具有一些类似的“相关”类,而该类也同样如此。只进行三个这样的级别,并且在“非嵌套”情况下类命名会失控。然而,如果你嵌套,事情仍然保持优雅。

尽管如此,我还是读到有人在 StackOverflow 上说嵌套类只有在它们对外界不可见时才是合理的;也就是说,如果它们仅用于包含类的内部实现。普遍引用的反对意见是膨胀包含类的源文件的大小,但部分类是该问题的完美解决方案。

我的问题是,为什么我们要警惕嵌套类的“公开”使用?还有其他反对这种使用的论据吗?

0 投票
2 回答
417 浏览

delphi - 如何覆盖嵌套类型的方法?

我在 Delphi 2009 中有一个自定义的 TObjectList 后代,我想稍微玩一下它的枚举器并向 MoveNext 方法添加一些过滤功能,以使其跳过某些对象。MoveNext 由 DoMoveNext 调用,它是一个虚拟方法,所以这应该不难重写……除了一件事。TObjectList 的 TEnumerator 不是它自己的类;它在 TObjectList 声明中声明为嵌套类型。

有什么简单的方法可以在我的后代类中覆盖 TEnumerator.DoMoveNext,还是我必须重新实现整个 TEnumerator?这不是一个很大的课程,但如果可以的话,我宁愿将冗余保持在最低限度......

0 投票
3 回答
1288 浏览

c# - .NET 嵌套类

我正在研究的当前类库将有一个基类(字段),其中包含 50 多种特定的“字段”类型,这些类型将从“字段”继承并嵌套以保持可读性。例如...

到目前为止,一切看起来都不错,我可以使用如下所示的代码:

但是,为什么这也有效?这里发生了什么,允许编译器/IDE 智能感知继续链接这些“FieldA”?

无论如何,这不是应用程序破坏,而是认为它很奇怪。在 Boo 中做同样的事情(这是用于库的实际语言)。

0 投票
4 回答
1568 浏览

class - 静态内部类是个好主意还是糟糕的设计?

我发现我有几个地方设计了扩展“帮助器”类的公共静态内部类,这使我的代码更加安全,并且在我看来,可读性更高。例如,假设我有一个“SearchCriteria”类。我搜索的不同事物有很多共同点(一个搜索词,然后是一组搜索词类型、日期范围等)。通过在静态内部类中扩展它,我将扩展和可搜索紧密耦合类有具体区别。这在理论上似乎是一个坏主意(紧耦合坏!),但扩展是特定于这个可搜索的类(一个类,一个目的)。

我的问题是,根据你的经验,使用静态内部类(或任何你的语言等价物)是否使你的代码更具可读性/可维护性,或者这最终会在 EOF 中咬你?

另外,我不确定这是否是社区 wiki 材料。

0 投票
2 回答
4876 浏览

java - 在 Java 中返回嵌套类类型

我有一个具有抽象 getType() 方法的基类。我希望子类能够实现此方法并提供要使用的实际类。

在代码中,类似于以下内容:

这里的问题是我在标记的行中得到“MyTile 无法解决”。所以我试图返回这个:

返回新的 MyTile().getClass()

但现在 Eclipse 告诉我:

类型不匹配:无法从 Class <capture#1-of 转换?将 B.MyTile 扩展为A.Tile><>

我什至不确定 Eclipse 中是否存在错误(捕获#1?)。

接下来,我将放弃接口并尝试使用抽象基 Tile 类。在 Eclipse 的帮助下,我最终得到了以下似乎可以编译的代码:

所以我基本上似乎有三个问题:

1)是否有可能让它与 A.Tile 作为接口一起使用?

2)使用基类时,Class<? extends X>真的是正确的方法吗?

3) 如何从方法内部返回嵌套的 B.MyTile 类引用?不得不做的事情new MyTile().getClass()是不对的,不是吗?

0 投票
2 回答
698 浏览

java - 使用 maven2 删除嵌套的测试类

我使用嵌套类来访问 JUnit 测试中的私有成员。它们总是被命名为“TestProxy”。

我想在构建时使用 maven2 删除它们,而不是将其包含到 jar 文件中。

  • 有没有配置选项?
  • 可以用插件完成吗?如果是这样,原型会很好!;-)

谢谢

编辑:为什么使用私有方法?我需要从 3rd 方系统注入数据,而每次 JUnit 测试运行都不能调用这些数据。而且我真的不想要私有数据的公共设置器,或者迟早另一个程序员可能会滥用它。

0 投票
3 回答
2096 浏览

c# - 嵌套静态类中不允许扩展方法?

为什么是这样?我会发现能够将一些扩展方法锁定为仅在我的一个类中使用真的很好。真的不想让某些扩展方法随处可用......而且它们看起来比常规静态方法好得多:P


为了澄清:

我想要这些扩展方法的原因是因为我正在扩展一个表单,它上面有一个 DataGridView。我已经厌倦了这样的行:

想要一个扩展方法,这样我就可以做到

所以换句话说,这个扩展方法在这个类之外根本没有用。但它会使代码更干净。当然也可以制作常规方法,这就是我最终要做的,因为这是不可能的。

Aaanyways,我只是想知道是否有人有一些很好的论据来解释为什么他们选择对可以创建使用扩展方法的地方施加这样的限制。必须在静态类中是完全有意义的。不能在嵌套的静态类中不会......至少对我来说......

0 投票
6 回答
21195 浏览

java - 关于 Java 中私有静态嵌套类的合成访问器的 Eclipse 警告?

我的同事建议使一些 Eclipse 代码格式和警告设置更加严格。这些更改中的大多数都是有意义的,但我在 Java 中得到了这个奇怪的警告。这是一些重现“问题”的测试代码:

与 !!! 在 Eclipse 中使用我的新警告设置给我这个警告:

对封闭构造函数 WeirdInnerClassJavaWarning.InnerClass() 的访问由合成访问器方法模拟。提高其知名度将提高您的绩效。

这是什么意思?当我将“私有静态类”更改为“受保护的静态类”时,警告消失了,这对我来说毫无意义。


编辑:我终于想出了“正确”的修复方法。这里真正的问题似乎是这个嵌套的私有静态类缺少公共构造函数。这一调整删除了警告:

我希望该类是一个私有嵌套类(因此没有其他类可以访问它,包括封闭类的子类)并且我希望它是一个静态类。

我仍然不明白为什么使嵌套类受保护而不是私有是解决“问题”的另一种方法,但这可能是 Eclipse 的一个怪癖/错误。

(抱歉,为了更清楚,我应该称它为 NestedClass 而不是 InnerClass。)