java.lang.ClassCastException:java.net.URI不能强制转换为java.net.URL

java.lang.ClassCastException:java.net.URI不能强制转换为java.net.URL,java,casting,classcastexception,Java,Casting,Classcastexception,我正在编写一个URL验证程序。代码如下 public ValidationResult validate(final Object data, final Object root, final String path, final ValidationContext validationContext, final EvaluationContext evaluationContext) { ValidationResult validationResult = new Validat

我正在编写一个URL验证程序。代码如下

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;
}
公共验证结果验证(最终对象数据、最终对象根、最终字符串路径、最终验证上下文验证上下文、最终评估上下文评估上下文){ ValidationResult ValidationResult=新的ValidationResult(); @抑制警告(“未选中”) 列表URL=(列表)数据; UrlValidator UrlValidator=新的UrlValidator(); 布尔值isValid=true; 用于(URL网站URL:URL){ if(urlvalidater.isValid(websiteURL.getPath())){ isValid=true; }否则{ isValid=false; 打破 } System.out.println(“websiteURL.getPath()”+websiteURL.getPath()); } System.out.println(“websiteURL.getPath()”+isValid); 返回验证结果; }
调试时,我发现
for(URL-websiteURL:URL)
给出了
java.lang.ClassCastException:java.net.URI无法转换为java.net.URL
错误。我如何才能使我的逻辑工作?

真正的问题在于:

@SuppressWarnings("unchecked")
List<URL> URLs = (List<URL>)data;
  • 您可以将验证器更改为使用
    URL
    URI
    对象。。。首先将上述声明更改为:

      List<?> urls = (List) data;
    
    List url=(List)数据;
    
    然后,您需要使用
    instanceof
    来区分
    URI
    URL
    对象,然后再验证它们


  • 对于记录,将
    URI
    转换为
    URL
    的方法是在其上调用
    URI.toURL()

    当我在列表类型中提供URL时,它为什么要将其转换为URI?如何将其强制为URL对象。1)未将其强制转换为
    URI
    。正在将其转换为
    URL
    。演员阵容正在发生>>因为
      List<?> urls = (List) data;