2017-04-03 23 views
0

我在Vaadin創建了一個StreamResource。我如何將參數fileName傳遞給匿名類?我必須在內部類中設置fileName匿名類如何傳遞本地參數?

這裏的源代碼:

String fileName; 

public void anotherMethod(){ 
    StreamResource myResource = createResource(); 
    fileDownloader = new FileDownloader(myResource); 
} 

private StreamResource createResource() { 
    return new StreamResource(new StreamResource.StreamSource() { 
     @Override 
     public InputStream getStream() { 
      .... 
      //some magic with the filename here 
     } 
    }, fileName); 
}   

我得到了NullPointerException通過fileName

+3

我沒有看到lambda表達式與問題的其餘部分有什麼關係 - 而且它很不清楚「我通過fileName得到NullPointerException」的含義。你也沒有在任何地方顯示*設置*'fileName'。 (這不是一個參數 - 它是一個字段。)請提供一個[mcve]和一個非常明確的問題描述。 –

+0

這是兩個問題,我刪除了lambda表達式的另一部分。 – emoleumassi

回答

1

在您的代碼中,變量fileName未初始化,或者您沒有提供這段代碼。嘗試初始化它想:

String fileName = "some file name";像:

String fileName = "virus.bat"; 

public void anotherMethod(){ 
     StreamResource myResource = createResource(); 
     fileDownloader = new FileDownloader(myResource); 
} 
private StreamResource createResource() { 
    final String URL = "someURL"; 

    return new StreamResource(new StreamResource.StreamSource() { 
     @Override 
     public InputStream getStream() { 
       // USE THE URL. 
     } 
    }, fileName); 
} 

你不參數傳遞給匿名類,但到StreamResource構造函數有兩個參數:一個StreamSourceString

我100%肯定你沒有分配任何東西給fileName,匿名類與它無關! :)

下一次提供更多的代碼,至少包含所有提供的變量的用例,因此它會更容易幫助。

+3

如果它是一個領域,它不需要是最終的。實際上,這是最終的「參考」。我想你已經試圖回答這個問題,然後它本身已經足夠清晰了......我會盡量避免這樣做。 –

+0

在這種情況下,他將'fileName'傳遞給'StreamResource'構造函數,而不是直接傳遞給匿名類,所以他不需要最終的修飾符。此外,問題是錯誤的,導致用戶詢問了一個匿名類,並且在他的例子中沒有匿名類傳遞。 – 2017-04-03 06:38:19

+0

我必須在getStream()方法中設置fileName內部 – emoleumassi