2016-08-20 31 views
2

是否有可能納入特質與方法,使用方法鏈實現類方法一起?這就要求性狀返回的特定類型的實現類,而「本」變量不是那種類型的默認值。能Groovy的特質返回類型實現適用於方法鏈

喜歡的東西:

def withFilter(String filter){ 
    this.filter = filter 
    return (super.getClass())this 
} 

根據下面的後頂部的答案,它看起來是很容易實現與斯卡拉性狀,但我不完全理解的語法。它看起來像它使用一個閉包,它定義了它的返回類型,但是在Groovy中可能是相同的?

Best practice to implement Scala trait which supports method chaining

+1

所以,它看起來像「本」實際上確實有實現類的類型,但我會關閉的IntelliJ智能感知,這似乎並沒有認識到的,並當試圖鏈接另一個方法後,它被強調爲「無法解析符號」。但是,它的工作。我將與Intellij開一張票。 – solvingJ

回答

3

您可以使用泛型方法。

下面是一個例子

trait MyTrait<T extends MyTrait<T>> { 
    def filter 

    T withFilter(String filter) { 
     this.filter = filter 
     return (T) this 
    } 
} 

class MyClz implements MyTrait<MyClz> { 
    def clzMethod() {} 
} 

def clz = new MyClz() 
     .withFilter("hello") 
     .withFilter("another") 
     .clzMethod() 
+0

這是一個非常簡潔,清晰,相關的答案。我能夠採取所提出的解決方案,將其應用於我的場景,而且它工作正常。非常感謝!後續問題:什麼是使第一線具體的好處:(>,而不是僅僅)我看到它的工作原理,如果我只讓,但我敢肯定,有一個爲你做了什麼原因。 – solvingJ

+0

@JerryW。在這種特殊情況下的唯一原因是爲了防止某些類型的錯誤,如'MyClz實現MyTrait ' – SerCe

相關問題