是否在Java中强制执行密封类,如果是,如何执行?

时间:2010-12-16 12:01:33

标签: java class scala interop sealed

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

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

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

因此,javac如何阻止Scala sealed类在Java中被分类?

2 个答案:

答案 0 :(得分:15)

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

答案 1 :(得分:1)

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