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

java - java的内部类会带来安全风险吗?

最近,我项目的安全团队发布了一份安全代码指南文档,旨在用作我们代码审查的一部分。首先让我印象深刻的是一个项目,上面写着“不要使用内部类”。我认为这似乎是一个非常严厉和笼统的声明。如果使用正确,内部类很好吗?但我做了一些谷歌搜索,发现了这个,为了方便起见,在这里引用。

规则 5:不要使用内部类

一些 Java 语言书籍说内部类只能由包含它们的外部类访问。这不是真的。Java 字节码没有内部类的概念,因此内部类被编译器翻译成普通类,而这些普通类恰好可以被同一个包中的任何代码访问。规则 4 说不依赖包范围进行保护。

但是等等,情况会变得更糟。内部类可以访问封闭外部类的字段,即使这些字段被声明为私有。并且内部类被翻译成一个单独的类。为了允许这个单独的类访问外部类的字段,编译器默默地将这些字段从私有更改为包范围!暴露内部类已经够糟糕了,但更糟糕的是编译器默默地否决了您将某些字段设为私有的决定。如果可以,请不要使用内部类。(具有讽刺意味的是,新的 Java 2 doPrivileged() API 使用指南建议您使用内部类来编写特权代码。这就是我们不喜欢 doPrivileged() API 的原因之一。)

我的问题是

  1. 这种行为在 java 5 / 6 中是否仍然存在?
  2. 考虑到除了外部类和内部类之外的任何试图访问外部类的私有成员的类都不会编译,这实际上是一种安全风险吗?
  3. 它是否构成足够的安全风险来警告“准则”“不要使用内部类”?
0 投票
11 回答
31718 浏览

java - 为什么Java禁止内部类中的静态字段?

虽然无法使用 访问静态字段OuterClass.InnerClass.i,但如果我想记录应该是静态的内容,例如创建的 InnerClass 对象的数量,那么使该字段成为静态会很有帮助。那么为什么Java 禁止内部类中的静态字段/方法呢?

编辑:我知道如何让编译器对静态嵌套类(或静态内部类)感到满意,但我想知道的是为什么 java 禁止语言设计和内部类(或普通内部类)中的静态字段/方法实施方面,如果有人对此了解更多。

0 投票
2 回答
1567 浏览

java - JYAML:序列化/反序列化嵌套/内部类

首先祝大家圣诞快乐!

现在我的问题是:假设我有一个Outer带有一些内部类 Inner 的类。作为 中的一个字段Outer,我有一个List<Inner>,然后我想将其转储到 YAML 文件中。我这样做是这样的:

这给了我一个例外:Exception in thread "main" org.ho.yaml.exception.ObjectCreationException: Error near line 0: Can't create object of type class game.Outer$Inner using default constructor.

我尝试提供自定义构造函数并将访问级别更改为公共,但无济于事。有任何想法吗?

0 投票
4 回答
22387 浏览

java - 如何在内部类中使用参数化泛型类型?

我正在尝试实现一个具有泛型参数化类型的内部类。

这是我的代码的简短版本:

这没用。Eclipse/Java 给我一个警告,T内部类的类型参数正在“隐藏”超类的参数。关于如何解决这个问题的任何想法?

编辑:我添加了另一个我遇到问题的内部类:TreePreOrderIterator. 、和的泛型类型T相同。内部类需要访问 AVLTree 中的字段。AVLTreeBinaryNodeTreePreOrderIterator

EDIT2:此外,Iterator访问 a BinaryNode<T>,这是一个冲突。

(注意:这是我正在为一个班级做的更大项目的一部分。如果需要任何其他信息,请询问。)

0 投票
2 回答
5583 浏览

java - 用spring创建内部类

在 Spring 中创建非静态内部类的最佳方法是什么?

这似乎可行,但我想避免需要构造函数参数:

0 投票
13 回答
118996 浏览

python - 如何从内部类访问外部类?

我有这样的情况...

如何Outer从类中访问类的方法Inner

0 投票
2 回答
2078 浏览

java - 允许在其他地方引用匿名内部类实例时对类进行垃圾收集?

我有一个A类:

该实例b具有对其外部类实例的隐式引用(可以由 引用this)。现在另一个对象b通过 getter 方法获得对 this 的引用。由于引用,这b不能被垃圾收集。

有没有办法允许对封闭A实例进行垃圾收集,可能是通过重置匿名内部类中的显式引用?

0 投票
7 回答
35972 浏览

java - 是否可以使用 Java 反射创建内部类的实例?

代码示例:

是否可以创建类 Bar 的新实例并给出其名称?我尝试使用:

它找到了类,但是当我使用 c.newInstance() 时,它会抛出 InstantiationException。

0 投票
1 回答
139 浏览

.net - visual c++ 内部类作为属性,可能吗?

作为一名 C++ 程序员,我最近开始使用 Visual C++。我被属性卡住了。

这个想法是创建一个内部类,该类将具有 2 个方法以及诸如 get/set 函数之类的属性。在视觉 C++ 中是否有可能(我猜是的)。

用法是这样的:

我什至尝试过使用运算符重载来做到这一点,但它似乎在视觉 c++ 中比在“普通”c++ 中复杂得多。

乔丹

0 投票
3 回答
7773 浏览

scala - 在 Scala 中引用内部类的类型

下面的代码试图模仿DSLs 的多态嵌入:它没有给出 in 中的行为,而是在其封闭类Inner的方法中编码。useInner我添加了该enclosing方法,以便用户只需保留对Inner实例的引用,但始终可以获取它们的封闭实例。通过这样做,Inner来自特定Outer实例的所有实例都只绑定到一种行为(但这里需要它)。

它不编译并且 scala 2.8 抱怨:

Programming Scala: Nested classesA Tour of Scala: Inner Classes中,在我看来,问题在于期望来自特定实例useInner的实例作为参数。InnerOuter

什么是真正的解释以及如何解决这个问题?