0

我试图反序列化一个SetOfMembers列表,并且我想在反序列化之后单独获取每个成员对象以便匹配给定字符串的成员名称。Java List反序列化并返回一个对象给出不兼容的类型错误

“不兼容的类型librarby.Member不能转换到会员其中会员是类型变量。会员延伸类SetOfMembers宣布对象”

上述错误保持显现和我不能让出了问题在我的代码。如果你可以向我解释什么是错的,我的代码会很棒。我使用@SuppressWarnings(“unchecked”),但这也没有帮助。请帮助。三江源

Error

+2

请将代码添加为文本。无法搜索图像,无法将其复制到文本编辑器,也无法以高质量的字体显示图像,从而降低其可读性。 – VGR

回答

0

我的第一个猜想是,

  1. 顶部和代码底部件在不同的文件中
  2. 在“顶”的文件,你导入(最有可能通过IDE建议)其他Member类,如java.lang.reflect.Member而不是你的library.Member,因此你有这个错误。

所以要解决这个问题 - 请检查您的第一个瓷砖中的导入部分。

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

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

1.顶部和底部代码在同一个包中“库”2.没有其他成员类被导入3.给定的方法解决了问题Thankyou,我不知道一个内置的成员类,这是这里的混乱。 – laish129

+0

Re(2),错误消息特指*类型*,表示泛型类型参数。不是导入的类。 – EJP

1

Java列表反序列化并返回一个对象给出了不兼容类型的错误

不,它不需要。

  1. 这是一个编译错误和它发生在编译时编译代码不是当'反序列化'。
  2. 该错误与反序列化完全无关:它与迭代关联。
  3. 这是一个错误,而不是警告,所以禁止警告的注释是无关紧要的。

该问题在错误消息中明确说明。由于您尚未提供课程的完整源代码,甚至没有提供它发生的方法,因此不可能进一步可靠。

但是我将在于:

  • 第一种方法是SetOfMember
  • SetOfMember一个构件上<Member extends Object>参数化。

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

public static <Member extends Object> SetOfMember<Member> deserializeMembers() throws ... 
相关问题