如何防止在java中重写的方法
我有这个代码。 Whis正在searchexcel csv并创build带有丢失字幕的.txt文件。 一部电影可以有一两个或三个或四个字幕。 在excel中,每种语言都写成Y或N. 它正在为一种语言(INDO)工作。 我添加了其他语言(GBR,SIM,MYS)到excel和这里。
int INDOSUB = 4; int GBRSUB = 5; int SIMSUB = 6; int MYSSUB = 7; int KPPNAME = 1; ... //NEW REQUIREMENT, CHECK PLAYLIST FOR MISSING SUBTITLES for(int i=0; i < assets.size(); i++) { try { file = new File(assets.get(i)); fileReader = new FileReader(file); bufferedReader = new BufferedReader(fileReader); while((line = bufferedReader.readLine()) != null) { tmp = line.split(","); if(tmp.length > 4) { String indosubStatus = tmp[INDOSUB]; String gbrsubStatus = tmp[GBRSUB]; String simsubStatus = tmp[SIMSUB]; String myssubStatus = tmp[MYSSUB]; String kppKey = tmp[KPPNAME]; if(indosubStatus.equals("N")) { kppSubitleMap.put(kppKey,"NO INDO SUBTITLES"); kppWithMissingSub.put(tmp[KPPNAME],""); } if(gbrsubStatus.equals("N")) { kppSubitleMap.put(kppKey,"NO GBR SUBTITLES"); kppWithMissingSub.put(tmp[KPPNAME],""); } if(simsubStatus.equals("N")) { kppSubitleMap.put(kppKey,"NO SIM SUBTITLES"); kppWithMissingSub.put(tmp[KPPNAME],""); } if(myssubStatus.equals("N")) { kppSubitleMap.put(kppKey,"NO MYS SUBTITLES"); kppWithMissingSub.put(tmp[KPPNAME],""); } } } } catch(IOException ex) { System.out.println(ex.toString()); } }
运行时只显示这个。 我相信KPP_Heartless也没有GBR和SIM字幕。 但它只显示最后一个。 所以它似乎是它最重要的以前的纪录。
KPP_HEARTLESS_19 - NO MYS SUBTITLES DATE/TIME: 1/11/2017 - 23:45:09:20 DATE/TIME: 1/12/2017 - 04:45:07:21 DATE/TIME: 1/12/2017 - 12:30:08:20 DATE/TIME: 1/12/2017 - 17:30:04:19 KPP_LISTEN_07 - NO INDO SUBTITLES DATE/TIME: 1/12/2017 - 03:30:11:24 DATE/TIME: 1/12/2017 - 07:30:13:13 DATE/TIME: 1/12/2017 - 15:00:10:10 KPP_LISTEN_08 - NO INDO SUBTITLES DATE/TIME: 1/12/2017 - 20:00:10:05 KPP_HEARTLESS_20 - NO MYS SUBTITLES DATE/TIME: 1/12/2017 - 23:45:09:19
有谁知道如何防止重写? 非常感谢你。
与重写方法没有关系。
问题是,当你写:
kppSubitleMap.put(kppKey,"NO SIM SUBTITLES"); kppWithMissingSub.put(tmp[KPPNAME],"");
您将覆盖与该关键字相关联的值。
1)如果你想在地图上有多个值,你可以使用List或Set作为值。 例如: Map<String, List<String>>
。
下面是一个例子,你应该用kppSubitleMap
地图做什么,但是问题和kppWithMissingSub
。
if(gbrsubStatus.equals("N")){ List<String> values = kppSubitleMap.get(kppKey); if (values = null){ values = new ArrayList<String>(); } values.add("NO GBR SUBTITLES"); kppSubitleMap.put(kppKey, values); ... }
锅炉板代码应在实用方法中执行,以避免在每个块中重复自己:
public List<String> getOrCreateList(Map<String,List<String>> map, String key){ List<String> values = map.get(kppKey); if (values = null){ values = new ArrayList<String>(); } return values; }
2)如果你想简单地连接信息,你可以做到这一点:
String value = kppSubitleMap.get(kppKey); if (value==null){ value = ""; } value += "NO GBR SUBTITLES"); kppSubitleMap.put(kppKey, value );
当您多次调用Map.put()时,Map只包含同一个键的最后一个值。 你可以使用Map<String, Set<String>>
例子:
Set<String> values = kppSubitleMap.get(kppKey); if (values == null) { values = new HashSet<>(); kppSubitleMap.put(kppKey, values); } values.add("NO GBR SUBTITLES")
或者使用Guava.Multimaps