当前位置: 首页 > 知识库问答 >
问题:

XStream:无法访问具有抽象类实现的字段

巢海
2023-03-14

在我的项目中,我使用XStream序列化/反序列化我的实体。
在应用程序中,所有的事情都很好,但当我尝试创建一些单元测试时就不行了。

我有一个抽象类a,它有一个字段name和公共访问器。我有一个类b扩展了a
我的XStream配置如下所示:

XStream xStream = new XStream();
//
xStream.alias("classNameSerialized", AnotherClass.class);
xStream.aliasAttribute(AnotherClass.class, OBJECT_ATTRIBUT_VERSION, OBJECT_ATTRIBUT_VERSION);
...
//
xStream.alias("classNameSerialized", B.class);
xStream.aliasAttribute(B.class, "name", "name");

当我运行我的应用程序时,没有任何问题。但当我尝试创建单元测试时,XStream引发异常:IllegalArgumentException:could not access org.mycompagny.b.name field:name

Edit

我在测试中尝试了B.Class.GetDeclaredField(“name”);,它引发了同样的异常。但当我尝试a.class.getDeclaredField(“name”);时,没有问题。我知道这可能是一个问题的反射,但我不能理解的是为什么这个问题只出现在我的单元测试,而不是在我的应用程序。

最后一个问题是如何测试此代码???

共有1个答案

曾新
2023-03-14

为了解决我的问题,我不得不删除我的抽象类...
在我的情况下,这不是一个大问题,只有5个类从抽象类继承。
如果有人有更好的解决方案,在这里发布;-)

 类似资料:
  • 我试图找到一种很好的方法来迭代并打印出ArrayList中的对象。 问题是我似乎无法到达用户键入对象信息(例如颜色和品牌)的字段。 对象的新实例如下所示: 汽车(以及自行车、公共汽车等其他类别)是汽车的子类。 车辆等级: } 汽车等级: }尝试迭代对象时: 当迭代对象时,我希望达到I.color中的颜色和品牌字符串。但是我猜想,由于我是一个新的对象,它可能无法访问与汽车、公共汽车等相关的字段和方法

  • 问题内容: 当其中的所有方法都是具体的时,有人在声明类抽象时有一些实际的编程情况吗? 问题答案: 好吧,您可能正在使用模板方法模式,其中存在多个都具有默认实现的覆盖点,但是组合的默认实现本身不合法-任何功能实现都必须是子类。 (是的,我不喜欢模板方法模式;)

  • 问题内容: 我创建了一个空的抽象类,并从中继承了该类: 我期望输出是 但是,我得到的是 如果我删除(这样就变成一个普通的类)和/或如果我设置了其他值,问题(显然)就消失了。 这里发生了什么? 问题答案: 这实际上不是ABC的问题,而是PyMongo的问题。有一个关于它的问题在这里。似乎pymongo重写以返回某种数据库类。这意味着将返回一个数据库对象,该对象在布尔上下文中为true。这使ABCMe

  • 对于我的另一个实体类 这是我的数据库表的脚本,它是一个Postgres数据库 当我的服务器运行时,我会收到以下错误消息 我会很感激你帮我的忙的。

  • 假设我有一个叫做book的类,它是抽象的,有一个私有变量price,它的getter方法也是抽象的。 现在让我们假设我有一个旧的Book类,它继承了Book的所有属性,但也有一个与之相关联的年龄。另外,我希望这个类从它的父类重写getPrice方法。这就是我陷入困境的地方,因为price变量是私有的,而父类有一个抽象的getter方法。 谢谢。

  • 第一次来这里。我是C新手,花了好几个小时想弄明白这个问题。很抱歉问一个似乎很常见的问题。我一生都找不到答案。 我在visual studio中遇到以下编译错误: 我的理解是,这意味着我创建的纯虚拟函数尚未在子类中实现。据我所见,它已在intNode子节点中实现。我做错了什么?代码如下。提前谢谢! 在节点中。h: 在Node.cpp: 编辑...对不起,我忘了添加这个位。错误指向main中的此部分