私が仕事をしているほとんどのプロジェクトには、読んでからルックアップを返す必要のあるタブ区切りファイルがあります。それ。私は自分自身が同じ方法を何度も何度も書き直すことに気づきます。より一般的なものを作成したいので、いつもコピー&ペーストのコードを行う必要はありません。下のコードから、私は9行目と16-19だけを変更します。だから私はMap<key, value>
と、どのように私はマップにデータを入力したいの実装を変更します。この方法から汎用的なプロセスを作成する方法はありますか?このメソッドを呼び出すたびに、Mapにデータを入力する方法を実装し、Mapをより一般的な型に変更しますよくタブ区切りファイルを読み込んで一般的なマップを返すジェネリックプロセスを作成する方法
1. public Map<String, PackageLog> readAllLogsIntoMap(File file){
2. if (!file.exists())
3. {
4. return new HashMap <String, PackageLog>();
5. }
6. BufferedReader reader = null;
7. FileReader fileReader = null;
8. String data = null;
9. Map <String, PackageLog> resultMap = new HashMap <String, PackageLog>();
10. try
11. {
12. fileReader = new FileReader(file);
13. reader = new BufferedReader(fileReader);
14. while ((data = reader.readLine()) != null)
15. {
16. PackageLog pl = new PackageLog(data);
17. if(!pl.getPdfName().equals("")){
18. resultMap.put(pl.getPdfName(), pl);
19. }
20. }
21. } catch(Exception e){
22.
23. }
24. finally
25. {
26. try{
27. if (reader != null) reader.close();
28. if (fileReader != null) fileReader.close();
29. }catch(IOException ioe){
30.
31. }
32. }
33. return resultMap;
34. }
これはすばらしく見えます。私はちょうどあなたのために1つの質問があります。メソッドnewMap()が本当に必要ですか?ですから 'if(!file.exists())'をチェックすると、新しいHashMap();を返すことができますか?これに何か問題はありますか? –
オハイオ州私は、あなたは私の上記の質問に答えた参照してください。しかし、私はあなたがこのマップの意味を理解していません。異なるマップ実装を提供したい場合は、newMap()メソッドが必要です。あなたは精緻化できますか? –
実際、答えで述べたように、実装が 'Map'(' HashMap'、 'TreeMap'など)のさまざまな実装を提供したい場合にのみ必要です。この場合でも、保護された抽象クラスgetMapClass()、またはジェネリックに縮小し、リフレクションを通じてインスタンス化を実行できます。 –