gpt4 book ai didi

java.lang.ClassCastException : java.net.URI 无法转换为 java.net.URL

转载 作者:行者123 更新时间:2023-11-30 11:05:51 24 4
gpt4 key购买 nike

我正在编写一个 URL validator 。代码如下

public ValidationResult validate(final Object data, final Object root, final String path, final ValidationContext validationContext, final EvaluationContext evaluationContext) {

ValidationResult validationResult = new ValidationResult();

@SuppressWarnings("unchecked")
List<URL> URLs = (List<URL>)data;

UrlValidator urlValidator = new UrlValidator();
boolean isValid = true;
for (URL websiteURL : URLs) {

if (urlValidator.isValid(websiteURL.getPath())) {
isValid = true;
} else {
isValid = false;
break;
}
System.out.println("websiteURL.getPath() " + websiteURL.getPath());
}
System.out.println("websiteURL.getPath() " + isValid);

return validationResult;
}

调试时我发现 for (URL websiteURL : URLs) 给出了 java.lang.ClassCastException: java.net.URI cannot be cast to java.net.URL 错误。我怎样才能让我的逻辑工作?

最佳答案

真正的问题在这里:

@SuppressWarnings("unchecked")
List<URL> URLs = (List<URL>)data;

事实上,看起来您正在使用一个对象调用此代码,该对象是 URI 的列表。对象而不是 URL 的列表对象。无论如何,类转换发生在一个隐藏的转换中,当 Iterator.next() 返回的对象时发生。对象分配给 websiteURL .

目前还不清楚正确的解决方案是什么:

  • 您可以(可能)更改调用它的代码以向它传递一个包含 URL 的列表。对象......正如 validator 所期望的那样。

  • 您可以更改 validator 以处理 URI 的列表对象...以 URLs 的声明开始多变的。 (YUCK!没有人向您解释 Java 标识符约定吗??)

      @SuppressWarnings("unchecked")
    List<URI> uris = (List<URI>)data;
  • 您可以更改 validator 以使用 URLURI对象 ... 首先将上述声明更改为:

      List<?> urls = (List) data;

    然后你需要使用instanceof区分URIURL验证对象之前。

备案,转换URI的方式到 URL就是打电话URI.toURL()在上面。

关于java.lang.ClassCastException : java.net.URI 无法转换为 java.net.URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29486106/

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