可以在Scala中定义sealed
个类,基本上是final
,除非子类在同一个文件中发生。
似乎JVM不允许final
类字节码和的子类。
考虑到字节码中没有源文件的“概念”,如何强制执行此限制?
因此,javac
如何阻止Scala sealed
类在Java中被分类?
答案 0 :(得分:15)
scalac在编译时对Scala源强制执行限制。生成的二进制类定义没有设置JVMs final标志,正如您现在可能已经猜到的那样,当针对Scala二进制文件编译Java源代码时,javac将不会强制实施密封限制。
答案 1 :(得分:1)
如何为要密封的类使用私有构造函数,然后创建扩展该类的公共最终静态内部类。然后在编译时获得一组固定的子类,无法进一步扩展。具有私有构造函数的基类随后作为到达这些内部类的路径,但本身无法在其他地方扩展和实现。