gpt4 book ai didi

java - 如何将 List 与 HtmlUnit 方法一起使用?

转载 作者:行者123 更新时间:2023-11-30 04:01:47 25 4
gpt4 key购买 nike

我尝试编写从网站提取所有图像(如壁纸)的程序。我决定制作动态集合前图像链接,但 getByXPath 方法不允许我这样做:

    HtmlPage currentPage = (HtmlPage) webClient.getPage(newURL("http://www.animewallpapers.com"));
List<?> urls = new ArrayList<HtmlImage>();
urls = currentPage.getByXPath("//img");
for(int i = 0; i < 500; i++){
currentPage = (HtmlPage) webClient.getPage(new URL(urls.get(i).toString()));
List<?> tempListUrls = new ArrayList<HtmlImage>();
tempListUrls = currentPage.getByXPath("//img");

这里我想将 tempListUrls 添加到 url,但我不能。您建议我如何解决这个问题?

最佳答案

看起来您在这里处理的是泛型和非泛型代码的混合:您的代码(显然使用泛型)和一些(可能是第三方)代码显然没有。作业

urls = currentPage.getByXPath("//img");

如果将 urls 变量声明为 List<HtmlImage>,则编译失败因为看起来 getByXPath返回一个未参数化的List实例。问题是当你用“?”参数化集合时然后编译器填写'?'添加方法(当然还有其他方法)。所以你得到boolean add(? o)这意味着该方法现在接受作为参数的唯一对象必须是不确定类型。不幸的是,只有 null 符合这个要求,因为只有 null 是不确定类型。

这意味着您必须使用未参数化的 List自己反对,或者必须从 List 进行转换至List<HtmlImage>在你的代码中像这样:

List<HtmlImage> urls = (List<HtmlImage>) currentPage.getByXPath("//img");

这将导致编译器警告,但只要您知道返回的列表将仅包含 HtmlImage 的实例或其子类,那么就可以安全地进行。您可以在大多数 Java 编译器中使用 @SuppressWarnings("unchecked") 来避免出现警告。

附注:您不必要地分配 new ArrayList<HtmlImage> ()urlstempListUrls在您的代码中,然后立即重新分配这些变量,这是低效的。您可以跳过创建未使用的 ArrayList在这两种情况下。

所以你的代码可能看起来像这样:

HtmlPage currentPage = (HtmlPage) webClient.getPage(newURL("http://www.animewallpapers.com"));
@SuppressWarnings("unchecked")
List<HtmlImage> urls = (List<HtmlImage>) currentPage.getByXPath("//img");
for(int i = 0; i < 500; i++){
currentPage = (HtmlPage) webClient.getPage(new URL(urls.get(i).toString()));
@SuppressWarnings("unchecked")
List<HtmlImage> tempListUrls = (List<HtmlImage>) currentPage.getByXPath("//img");

我建议避免@SuppressWarnings,除非它只影响一行代码,否则它会在将来造成维护麻烦。

关于java - 如何将 List<?> 与 HtmlUnit 方法一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21804362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com