繁体   English   中英

使用sbt console / spark-shell重写类

[英]overriding classes using sbt console/spark-shell

所以我最近对开发使用sbt console / spark-shell感兴趣了,我对使用现有的包/ jar有疑问。 所以我知道你可以导入罐子,它可以覆盖类,但我想知道:是否有可能覆盖类并强制所有其他类指向该覆盖类?

所以,如果我有

class Bar(){ 
    def a() = { (new Foo).blah()}
}

并且我重写Foo,有没有办法可以做到这一点,所以我不需要也覆盖Bar?

让我们用时间表解释一下:

1. class X { def t = 1 }

2. class Y {
      def x: X = new X
   }

到此为止,第2行的Y类定义是指第1行中X的定义。

3. class X { def t = 2 } 

现在,第2行的Y类仍然从第1行引用X.这就是REPL的工作原理。 变更是有效的,而不是倒退。

4. class Y {
     def x: X = new X
   }

现在,正如您所期望的那样,第4行的新Y将引用第3行的新X.

通常,您可以通过替换类路径中的类来实现。 如果新版本是二进制兼容的,您甚至可以重新运行而无需重新编译。

这两个故障是REPL编译器是驻留的,并且该类位于特定的包中(例如, $line8 )。 您需要一个新的编译器来使用刷新的包。

在重置编译器时,有打开的票证可以保留或丢弃$line包。 另一个缺失的部分是在适当的包中编译新版本的类,或者反过来重新生成消费类。

请注意:require命令允许您添加jar但不替换类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM