12

可以sealed在 Scala 中定义类,基本上final除非子类化发生在同一个文件中。

似乎 JVM 不允许final类字节码及其子类。

考虑到字节码中没有源文件的“概念”,这个限制是如何执行的?

因此,如何javac防止 Scalasealed类在 Java 中被子类化?

4

2 回答 2

15

scalac 在编译时对 Scala 源代码实施了限制。生成的二进制类定义没有设置 JVM 的最终标志,因此,正如您现在可能已经猜到的,当 Java 源代码针对 Scala 二进制文件编译时,javac 不会强制执行密封限制。

于 2010-12-16T12:36:26.467 回答
1

如何为您想要密封的类使用私有构造函数,然后创建扩展该类的公共最终静态内部类。然后你在编译时得到一组固定的子类,不能进一步扩展。具有私有构造函数的基类随后用作到达这些内部类的路径,但其本身不可能在其他地方扩展和实现。

于 2013-03-09T14:44:57.787 回答