2016-11-23 29 views
0

我是一名嘗試學習常規技術的Java程序員。目前關閉對我來說有點混亂。在groovy樣式中重寫java匿名類?

我可以幫助理解如何使用閉包來替換下面的抽象代碼。我想一個函數被定義爲一個變量或類似的東西,但我不能破解它。

//MY ABSTRACT CLASS 
public abstract class AbstractResource { 

    protected StreamingOutput activityStreamingOutput(serviceResponse){ 
     return new StreamingOutput() { 
        @Override 
        public void write(OutputStream os) throws IOException, 
        WebApplicationException { 
         def writer = new BufferedWriter(new OutputStreamWriter(os)); 
         writer.write(serviceResponse); 
         writer.flush(); 
        } 
       } 
    } 
} 

// MY CHILD CLASS 
class MaintanenceResourceImpl extends AbstractResource{ 

    public void doSomething(Reader reader) throws Exception { 
      // I'D LIKE TO DO SOMETHING GROOVYISH HERE 
      def StreamingOutput = activityStreamingOutput(serviceResponse) 
    } 

感謝

+0

你到底想達到什麼目的? – Dany

回答

1

沒有太多,你可以在這裏做(W/O知道其他細節),但這樣的:

abstract class AbstractResource { 

    Closure activityStreamingOutput(serviceResponse){ 
     { OutputStream os -> 
      os.withWriter{ it << serviceResponse } 
     } 
    } 
} 

class MaintanenceResourceImpl extends AbstractResource { 

    void doSomething(Reader reader) throws Exception { 
      activityStreamingOutput(serviceResponse).call someOutputStream 
    } 
+0

謝謝。看起來這裏並沒有真正的收益。我所做的只是將抽象方法更改爲使用OutputStream os - > os.withWriter {it << serviceResponse}。正如我所提到的,我仍然試圖解決封閉有用的問題,儘管匿名課程非常好。我將不得不尋找我認爲不同的用例 – Richie