幾乎每個我工作的項目都會有某種製表符分隔的文件,我需要讀入並返回查找Map它。我發現自己一遍又一遍地重寫相同的方法。我想創建更通用的東西,所以我不必一直複製和粘貼代碼。從下面的代碼,我只改變行9和16-19。所以我只改變了Map<key, value>
,以及我想如何將數據輸入到Map中的實現。有沒有辦法從這個方法中創建一個通用的過程,所以每次我想調用這個方法時,我所需要的就是提供我如何將數據輸入到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. }
這看起來很棒。我只有一個問題給你。我們真的需要'newMap()'方法嗎?所以當我們檢查'if(!file.exists())'時,我們可以只返回新的HashMap();'?哈維有什麼問題嗎? –
哦,我明白了,你確實回答了我的上述問題。但是,我不明白你的意思是什麼'考慮到你只需要newMap()方法,如果你想提供不同的地圖實現'。你能詳細說明嗎? –
事實上,正如答案中所述,只有在實現可能需要提供'Map'('HashMap','TreeMap'等等)的不同實現時纔有必要。即使在這種情況下,它也可以簡化爲受保護的抽象類getMapClass(),甚至是泛型的,並通過反射來執行實例化。 –