簡體   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