Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
可以sealed在 Scala 中定义类,基本上final除非子类化发生在同一个文件中。
sealed
final
似乎 JVM 不允许final类字节码及其子类。
考虑到字节码中没有源文件的“概念”,这个限制是如何执行的?
因此,如何javac防止 Scalasealed类在 Java 中被子类化?
javac
scalac 在编译时对 Scala 源代码实施了限制。生成的二进制类定义没有设置 JVM 的最终标志,因此,正如您现在可能已经猜到的,当 Java 源代码针对 Scala 二进制文件编译时,javac 不会强制执行密封限制。
如何为您想要密封的类使用私有构造函数,然后创建扩展该类的公共最终静态内部类。然后你在编译时得到一组固定的子类,不能进一步扩展。具有私有构造函数的基类随后用作到达这些内部类的路径,但其本身不可能在其他地方扩展和实现。