问题标签 [inner-classes]

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 投票
4 回答
15085 浏览

java - 为什么内部类可以访问私有方法?

我不明白为什么会编译。f() 和 g() 在内部类中是可见的,尽管它们是私有的。他们是否因为是内部类而受到特殊对待?

如果 A 和 B 不是静态类,它仍然是相同的。

0 投票
2 回答
451 浏览

java - Java中的匿名内部类有没有办法“失去”它们的范围?

当我将匿名内部类传递给函数时,我可以从该类的方法中引用当前范围内的变量,如下所示:

现在,在上面的 someMethod 运行之后,调用者和带有小匿名的队列可以分道扬镳,据我了解,JVM 保持所有引用正常,因此这始终有效。

但是,如果,例如,队列被序列化,程序关闭并重新启动,然后队列被反序列化并且其中的项目应该运行,而 Caller 实例早已消失并被遗忘,该怎么办?

还有其他方法可以让周围的对象和匿名内部类以一种在匿名类内部调用不再起作用的方式分离吗?

0 投票
4 回答
1568 浏览

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

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

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

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

0 投票
4 回答
666 浏览

c# - 为参数对象创建常规类还是内部类?

我没有将许多参数传递给一个方法,而是将它封装到一个参数对象中。

注意:简化为演示
替代文字

对于这种情况,更好的做法是什么?

• 创建一个类并将其命名InventorySaveArgs
- 或 -
• 创建一个嵌套类并将其命名SaveArgs

你能解释一下为什么会选择其中一个吗?

[编辑]:该参数类型也将在另一个程序集中使用。

附带问题:只是好奇,如果有一个模式名称用于将多个参数封装到一个对象中。

[更新]:在 MSDN 上找到的嵌套类型使用指南
InventorySaveArgs应该可以从另一个程序集中获得,所以我要上一个普通的课程。

0 投票
4 回答
10448 浏览

java - 实例化内部类

我有一个实用方法,当从中删除不相关的逻辑时,简化的方法如下所示:

问题是,如果clazz是一个内部类,例如Foo.Bar.class,那么newInstance()即使是公共的,该方法也不起作用Bar,因为它会抛出一个java.lang.InstantiationException.

有没有办法动态实例化内部类?

0 投票
2 回答
698 浏览

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

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

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

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

谢谢

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

0 投票
6 回答
27137 浏览

java - 是否可以在 Java 中将匿名内部类设为静态?

在 Java 中,嵌套类可以是也可以static不是。如果它们是static,则它们不包含对包含实例的指针的引用(它们也不再称为内部类,它们称为嵌套类)。

static在不需要该引用时忘记创建嵌套类可能会导致垃圾收集或逃逸分析出现问题。

是否也可以创建一个匿名内部类static?还是编译器会自动解决这个问题(它可以,因为不能有任何子类)?

例如,如果我做一个匿名比较器,我几乎不需要对外部的引用:

0 投票
4 回答
1196 浏览

java - Java - local class and generics, why compiler warning?

Named local classes are very rarely used, usually local classes are anonymous. Does anybody know why the code below generates a compiler warning?

The warning is in new InIterator() and it says

If the class, unchanged, is made anonymous, or if it is made a member, the warning goes away. However, as a named local class, it requires a declaration class InIterator<E> implements ... for the warning to go away.

What's going on?

0 投票
9 回答
50943 浏览

c# - 在 C# 中使用内部类

关于 C# 中内部类的使用和结构的最佳实践是什么。

例如,如果我有一个非常大的基类和两个大的内部类,我应该将它们拆分为单独的(部分类)代码文件还是将它们保留为一个非常大且笨重的代码文件?

拥有一个带有公共继承内部类的抽象类也是不好的做法吗?

0 投票
15 回答
73425 浏览

java - 为什么我们不能在(非静态)内部类(Java 16 之前)中有静态方法?

为什么我们不能在非静态内部类中使用静态方法?

如果我将内部类设为静态,它就可以工作。为什么?

在 Java 16+ 中,这两个都是有效的。