如何防止在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