2017-04-03 3 views
0

私はVaadinにStreamResourceを作成します。パラメータfileNameを匿名クラスに渡すにはどうすればよいですか?内部クラスにfileNameを設定する必要があります。私はfileNameNullPointerExceptionを取得匿名クラスローカルパラメータを渡す方法は?

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); 
}   

は、ここでソースコードです。

+3

ラムダ式が残りの質問と何が関係しているかはわかりません。「fileNameでNullPointerExceptionを取得しました」という意味がはっきりしません。また、あなたは*ファイル名を設定しているところは表示していません。 (これはパラメータではなく、フィールドです。)[mcve]と問題の明確な説明を入力してください。 –

+0

それは2つの質問だった、私はラムダ式で別の部分を削除しました。 – emoleumassi

答えて

1

コードでは、変数fileNameは初期化されていないか、このコードを提供していません。それが好きで初期化してみてください。

String fileName = "some file name";のように:StreamSourceString

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); 
} 

あなたが匿名クラスではなく2つのパラメータがありStreamResourceコンストラクタにパラメータを渡すことはありません。

fileNameに何も割り当てていないことを100%確信しています。匿名クラスは関係ありません。 :)

次回は、提示された変数のすべてのユースケースについて、より多くのコードを提供してください。

+3

フィールドであれば最終的なものである必要はありません。効果的には、それは最終的な 'this'参照です。私は、あなた自身が十分に明確になる前にこの質問に答えようとしたと思います。私はそうしないようにしています。 –

+0

この場合、 'fileName'を匿名クラスではなく' StreamResource'コンストラクタに渡しました。したがって、final修飾子は必要ありません。また、質問が間違っているため、ユーザーが匿名クラスについて質問し、彼の例では匿名クラスのパスはありません。 –

+0

getStream()メソッドの内部でfileNameを設定する必要があります – emoleumassi

関連する問題