【问题标题】:Java List deserializing and returning an object gives Incompatible types errorJava List 反序列化并返回对象会导致类型不兼容错误
【发布时间】:2017-03-09 21:31:31
【问题描述】:

我正在尝试反序列化一个 SetOfMembers 列表,并且我想在反序列化后单独获取每个成员对象,以便将成员名称与给定的字符串匹配。

“不兼容的类型 librarby.Member 无法转换为 Member,其中 Member 是类型变量。Member 扩展了在 SetOfMembers 类中声明的 Object”

上述错误不断出现,我无法在我的代码中找出问题。如果你能向我解释我的代码出了什么问题,那就太好了。我使用了@SuppressWarnings("unchecked") 但这也没有帮助。请帮忙。谢谢你

【问题讨论】:

  • 请以文本形式包含代码。图像无法搜索,无法复制到文本编辑器,也无法以高质量字体显示,从而降低了可读性。

标签: java serialization compiler-errors incompatibletypeerror variable-types


【解决方案1】:

Java List 反序列化并返回一个对象会导致类型不兼容的错误

没有。

  1. 这是一个编译错误,它发生在编译时编译代码在“反序列化”时。
  2. 该错误根本与反序列化无关:它与迭代有关。
  3. 这是一个错误,而不是警告,因此抑制警告的注释无关紧要。

错误信息中清楚地说明了问题。由于您没有提供该类的完整源代码,甚至没有提供它发生的方法,因此不可能进一步可靠。

不过我会猜测

  • 第一种方法是SetOfMember的成员
  • SetOfMember<Member extends Object> 上参数化。

... 这将完全解释错误消息。问题在于静态方法deserializeMembers() 实际上并不是通用的。解决方法是泛化deserializeMembers() 方法:

public static <Member extends Object> SetOfMember<Member> deserializeMembers() throws ...

【讨论】:

    【解决方案2】:

    我的第一个猜测是

    1. 顶部和底部的代码位于不同的文件中
    2. 在您导入的“顶部”文件中(很可能是由 IDE 建议)一些其他 Member 类,例如 java.lang.reflect.Member 而不是您的 library.Member,因此您会遇到此错误。

    所以要解决这个问题 - 检查第一个图块中的导入部分。

    如果您确实需要在同一个文件中同时使用两个 Member 类,您仍然可以使用完全限定名称。我敢打赌下面的代码无论如何都会起作用。

    for(library.Member mem : Serialization.deserializeMembers())
    

    【讨论】:

    • 1.顶部和底部代码在同一个包“库”中 2.没有导入其他成员类 3.给定的方法解决了问题 谢谢,我不知道内置的成员类和ig这是这里的混乱。
    • Re(2),错误信息特指一个type,表示泛型类型参数。不是导入的类。
    猜你喜欢
    • 2011-08-26
    • 2021-04-15
    • 1970-01-01
    • 2014-11-11
    • 2022-01-08
    • 2020-08-13
    • 1970-01-01
    • 2021-12-30
    • 2013-12-16
    相关资源
    最近更新 更多