java 泛型问题?

skychen1900 2007-09-14 09:36:02
......
List entries = new ArrayList(); //1
.....
entries.addAll(inFeed.getEntries()); //2
......

第一行定义一个List类型的entries, 第二行的inFeed.getEntries()方法返回的是一个List类型的值,编译通不过,请问如何使用泛型解决?

编译器提示:
FeedAggregator.java: 警告:[unchecked] 未经检查的转换
找到: java.util.List
需要: java.util.Collection<? extends java.util.ArrayList>
entries.addAll(inFeed.getEntries());
^
...全文
464 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
qingyuan18 2007-09-15
  • 打赏
  • 举报
回复
楼上有位兄弟说得不错,如果你往List里加入的是各式各样的类型,则没有必要用泛型了~~
  • 打赏
  • 举报
回复
不是这样写的啦,你那上面找了半天,不过找到了,要改成

List<SyndEntry> entries = new ArrayList<SynEntry>();

同时,还要把 SyndFeed 类中的 getEntries() 的方法返回类型从 List 改为 List<SyndEntry> 就基本上可以了。但是这个程序里所有有 List 代码的地方都要加上泛型参数,否则还会报警告。
skychen1900 2007-09-14
  • 打赏
  • 举报
回复
既然inFeed.getEntries()返回List, 那么这样写
List<List> entries = new ArrayList<List>();
entries.addAll(inFeed.getEntries());
为什么还通不过编译?
amazeur 2007-09-14
  • 打赏
  • 举报
回复
up
skychen1900 2007-09-14
  • 打赏
  • 举报
回复
jdk 5 引入了泛型嘛
skychen1900 2007-09-14
  • 打赏
  • 举报
回复
加上@SuppressWarnings("unchecked")可以解决,
不知道为什么,应该怎样写这个泛型?

既然inFeed.getEntries()返回List, 那么这样写
List<List> entries = new ArrayList<List>();
entries.addAll(inFeed.getEntries());
为什么还通不过编译?
syhan 2007-09-14
  • 打赏
  • 举报
回复
Software requirements: J2SE 1.4+, JDOM 1.0 and ROME 0.5.

晕,这是1.4的例子阿,用tiger编译肯定会有警告的
skychen1900 2007-09-14
  • 打赏
  • 举报
回复
不是jdk 中的例子,here:
http://wiki.java.net/bin/view/Javawsxml/Rome05TutorialFeedAggregator
syhan 2007-09-14
  • 打赏
  • 举报
回复
为什么我的jdk里没有这个例子?
  • 打赏
  • 举报
回复
既然采用了 JDK 1.5 的版本,那就要按 1.5 规范的要求来写,在 1.5 中所有的集合类都增加了泛型参数,当然你也可以不加,但在编译时就会出现警告,从 List 中再取回值时也要做强制类型转换,我认为是比较麻烦的。

除非你添加到 List 中的数据类型是各式各样的,那就可以不用加泛型参数了,但是你的问题并不是这样的。

你可以采用楼上的方法来忽略警告,或者采用我上面的那些方法来取消警告。
skychen1900 2007-09-14
  • 打赏
  • 举报
回复
import java.net.URL;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.List;
import java.util.ArrayList;

import com.sun.syndication.feed.synd.SyndFeed;
import com.sun.syndication.feed.synd.SyndFeedImpl;
import com.sun.syndication.io.SyndFeedOutput;
import com.sun.syndication.io.SyndFeedInput;
import com.sun.syndication.io.XmlReader;

import java.lang.annotation.*;

/**
* It aggregates a list of RSS/Atom feeds (they can be of different types)
* into a single feed of the specified type.
* <p>
* @author Alejandro Abdelnur
*
*/
public class FeedAggregator {

public static void main(String[] args) {
boolean ok = false;
if (args.length>=2) {
try {
String outputType = args[0];

SyndFeed feed = new SyndFeedImpl();
feed.setFeedType(outputType);

feed.setTitle("Aggregated Feed");
feed.setDescription("Anonymous Aggregated Feed");
feed.setAuthor("anonymous");
feed.setLink("http://www.anonymous.com");

List entries = new ArrayList();
feed.setEntries(entries);

for (int i=1;i<args.length;i++) {
URL inputUrl = new URL(args[i]);

SyndFeedInput input = new SyndFeedInput();
SyndFeed inFeed = input.build(new XmlReader(inputUrl));

entries.addAll(inFeed.getEntries());
}

SyndFeedOutput output = new SyndFeedOutput();
output.output(feed,new PrintWriter(System.out));

ok = true;
}
catch (Exception ex) {
System.out.println("ERROR: "+ex.getMessage());
}
}

if (!ok) {
System.out.println();
System.out.println("FeedAggregator aggregates different feeds into a single one.");
System.out.println("The first parameter must be the feed type for the aggregated feed.");
System.out.println(" [valid values are: rss_0.9, rss_0.91U, rss_0.91N, rss_0.92, rss_0.93, ]");
System.out.println(" [ rss_0.94, rss_1.0, rss_2.0 & atom_0.3 ]");
System.out.println("The second to last parameters are the URLs of feeds to aggregate.");
System.out.println();
}
}
}

这是 java.net 中的一个例子,
我也不知道为什么这么写?
bookong 2007-09-14
  • 打赏
  • 举报
回复
最简单的方法,在你的方法或类之前加上
@SuppressWarnings(value={"unchecked"})
就好了
syhan 2007-09-14
  • 打赏
  • 举报
回复
不懂你为什么要这样写,没必要
直接么
List entries = inFeed.getEntries();
好了
skychen1900 2007-09-14
  • 打赏
  • 举报
回复
inFeed.getEntries() 这个方法的返回类型就是 List!
  • 打赏
  • 举报
回复
不知道添加到 List 里面的类名,就假设是 Entries 了。
  • 打赏
  • 举报
回复
List<Entries> entries = new ArrayList<Entries>();

而 getEntries() 方法返回的类型也应是 List<Entries> 的
bookong 2007-09-14
  • 打赏
  • 举报
回复
@SuppressWarnings("unchecked")
表示该项所涵盖的范围不需要显示所有的警告信息。
你也可以在将元素添加到List时强制类型转换或用泛型。

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧