【问题标题】:java.lang.ClassCastException: myClass cannot be cast to class java.util.Listjava.lang.ClassCastException:无法将 myClass 强制转换为 java.util.List 类
【发布时间】:2022-01-12 16:17:06
【问题描述】:

我有一个名为 MyClass 的类设置,其中包含两个列表:

public class MyClass {
    List<String> list1;
    List<Descriptor> list2;

    public List<String> getList1() { return list1; }

    public List<Descriptor> getList2() { return list2; }

    public void setList1(List<String> list1) { this.list1 = list1; }

    public void setList2(List<Descriptor> list2) { this.list2 = list2; }
}

在另一个类中,我想基于 MyClass 创建一个 object 并将该对象提供给方法

MyClass class = new MyClass();
class.setList1(someList);
class.setList2(otherList);
return Response.status(HttpStatus.OK_200).entity(class).build();

.entity 方法接受了一个对象,但我得到了 java.lang.ClassCastException 错误并且不知道为什么。

提供的所有内容都是一个列表,所以我不明白为什么会抛出这个错误

【问题讨论】:

  • MyClass 不是List
  • Response 来自什么包?
  • 注意:变量class 没有引用一个类——它引用了一个类的实例。它是一个关键字。
  • 能否分享一下响应类

标签: java list exception classcastexception


【解决方案1】:

您是说:MyClass(实体)由列表组成,因此它是一个列表。

这就像说:我的房子是砖砌的,所以我的房子是砖的。

这里的核心工作是将传递给entity() 方法的内容转换为一袋字节,因为HTTP 协议发送字节。这是如何运作的?这就是您需要了解您的工具和库如何工作的地方:我假设您在这里使用的是 Jersey/JAX-RS。设置如下:

  • 您可以发回任何对象
  • 但是,该对象通过一组已注册的“转换器”进行假脱机处理,每个“转换器”都能够将对象类型的子集转换为字节流。开箱即用,系统知道如何“翻译”字符串(这很简单 - 使用 .getBytes(someCharsetEncoding) 将字符串转换为字节,瞧 - 字节)和其他一些东西。但是如果你愿意,你可以添加更多的翻译。这就是entity() 方法接受任何对象的原因。
  • 一些注册的翻译人员认为它们是列表,而实际上它们不是,从而导致您的错误。 (因为你有一个MyClass 的实例,它不是一个列表。当然,它的所有字段都是列表,但是,房子不是砖头)。

但解决方案(可能)不在于修复那个“翻译器”。首先想一想:你到底想做什么? HTTP 只是发送字节,那么你要发送什么字节呢? MyClass 对象需要以一种或另一种方式转换为字节。那应该怎么走?什么服务调用这个?它有什么作用?

这是一个示例答案:

某些网站的 javascript 会对该端点进行 AJAX 调用,并通过使用 JSON 库对其进行解析或只是 eval()ing 将其接收到的任何内容转换为 javascript 对象。

如果这是您的答案,您希望将您的 MyClass 实体转换为 JSON。 Jackson 可以为您做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-15
    • 2017-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多