Java:警告:迭代器是原始类型



我不明白为什么我的代码有这样的警告,这是我的代码:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.setContentType("text/html");  
PrintWriter out=response.getWriter(); 
try {
InputStream csvfile = null;
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
Map<String, List<FileItem>> file = upload.parseParameterMap(request);

Iterator entries = file.entrySet().iterator();
while (entries.hasNext()) {
Entry thisEntry = (Entry) entries.next();
List<FileItem> value = (List) thisEntry.getValue();
for (FileItem uploadItem : value) {
csvfile = uploadItem.getInputStream();
}  // end of for loop
}//while
InputStreamReader isr = new InputStreamReader(csvfile);
BufferedReader reader = new BufferedReader(isr);

String text = "";
reader.readLine();

我收到警告:iterator is a raw type. references to generic type iterator e

我该如何解决这个问题?

迭代器是参数化类型。

Iterator entries = file.entrySet().iterator();

应该是:

Iterator< Entry< String, List<FileItem> > > entries = file.entrySet().iterator();

迭代器的类型应为Entry<...>,因为条目集从映射返回一组条目。...应与地图的类型相同。在您的情况下:

// Type of map
Map<String, List<FileItem> > 
// Type of entries
Entry< String, List<FileItem> >
// Type of iterator
Iterator< Entry< String, List<FileItem> > >

与其获取迭代器并调用hasNext(),不如让 java 通过增强的 for 循环为您执行此操作:

// Just get the entry set, not the iterator
Set< Entry<String, List<FileItem> > > entrySet = file.entrySet();
// Java will inject the iterator, hasNext(), etc for you
// This reads: "For each entry of type XYZ in entrySet, do the following..."
for (Entry< String, List<FileItem> > entry : entrySet) {
// Get the list from entry, entry is the result of entrySet.next()
List<FileItem> list = entry.getValue();
// Nested enhanced for loop use another iterator
for (FileItem uploadItem : list) {
csvfile = uploadItem.getInputStream();
}  
}

Iterator更改为Iterator<Entry<String, List<FileItem>>>,同样地将Entry更改为Entry<String, List<FileItem>>

但看起来您真的想遍历地图files中的值。在这种情况下,只需使用files.values().无需使用任何IteratorEntry,以下内容将替换整个while循环:

for (List<FileItem> value : files.values()) {
for (FileItem uploadItem : value) {
csvfile = uploadItem.getInputStream();
}
}

您的完整代码如下所示:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");  
PrintWriter out = response.getWriter();
try {
InputStream csvfile = null;
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
Map<String, List<FileItem>> file = upload.parseParameterMap(request);
for (List<FileItem> value : files.values()) {
for (FileItem uploadItem : value) {
csvfile = uploadItem.getInputStream();
}
}
InputStreamReader isr = new InputStreamReader(csvfile);
BufferedReader reader = new BufferedReader(isr);
String text = "";
reader.readLine();

最新更新