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

Jade content manager在提取消息内容时调用默认构造函数

束雅达
2023-03-14

我正在两个代理之间发送一个包含我的本体中的概念的消息。Concept对象封装在action中,并进行如下编码:

SendAction sendObject = new SendAction ("action info", conceptObject);

Action action = new Action();
action.setAction(sendObject);
action.setActor(getAID());

getContentManager().fillContent(message, action);

但是,在对收件人代理中的消息内容进行解码时,如下所示:

ContentElement content = getContentManager().extractContent(message);

调用concept对象的默认构造函数,从而提取包含空concept对象的“SendAction”,而不是我编码的对象。

有趣的是,“发送动作”本身被正确地编码和解码,因为“动作信息”字符串仍然保留。只有conceptObject是默认值。

为什么会发生这种情况,我又该如何预防呢?

共有1个答案

冷吉星
2023-03-14

我已经解决了这个问题,所以我想我会为未来的用户回答它,特别是因为在网上没有太多关于这个问题的内容。

在这种情况下,出现了两个问题:

首先,在本体的“概念对象”中使用HashMap。显然Jade的内容管理器并不能很好地处理HashMaps的连载。我只从我自己、我的教授和同学的综合经验中知道这一点。

第二,我的“概念对象”上的setter被设置为private。当时我不知道,但是Jade的内容管理器需要公共设置器来处理内容对象的序列化和反序列化。

注意:它还需要一个默认构造函数。

 类似资料:
  • 为什么: 如果一个类不提供任何然后在编译时由编译器给出,但是如果一个类包含,那么默认构造函数不是由编译器提供。 我正在编译下面的代码。它给出了编译错误。 代码: 控制台错误: 当我只调用。工作正常。但是当您想使用参数化构造函数调用

  • 问题内容: 默认构造函数到底是什么?你能告诉我以下哪个是默认构造函数,它与其他构造函数有何不同? 问题答案: 他们都不是。如果定义,则不是默认值。 除非你定义另一个构造函数,否则默认构造函数是自动生成的无参数构造函数。任何未初始化的字段都将设置为其默认值。对于你的榜样,它看起来像这样假设的类型String,int以及int,那类本身是公共的: 这与 完全没有构造函数。但是,如果定义至少一个构造函数

  • 我有一个有两个构造函数的类。 有一个具有两个构造函数的类Sample。需要在Sample类中实例化另外三个类(ClassOne,ClassTwo和ClassIII)。所有三个类都包含默认和参数化构造函数。如果调用了Sample类的默认构造函数,则应调用ClassOne,ClassTwo和ClassIII的默认辅助构造函数。如果调用Samples参数化构造函数,则调用ClassOne、ClassII

  • 有什么想法为什么我可能会看到这门课的以下消息吗? 消息 我不知道为什么这行不通。当我移除super()时,错误就会消失,所以这似乎会引起一些问题。

  • 问题内容: 所有, 我正在尝试在一些古老的Java代码中进行一些单元测试(无接口,无抽象等)。 这是一个使用ServletContext的servlet(我假设它是由Tomcat设置的),并且它的数据库信息在web.xml / context.xml文件中设置。现在,我已经弄清楚了如何制作Fake ServletContext,但是代码已经 遍布整个地方(因此替换它是不可行的)。我需要找到一种方法

  • 问题内容: 我知道我在这里问一些严重的101问题… 我有一些课,还有一个延伸课。在我有一个构造函数,它接受一组参数,并对其字段进行设置。派生类(例如)通常不需要进行修改。现在我的IDE给我 “ Foo中没有默认的构造函数” 。从一点点谷歌搜索,这似乎是因为“构造函数没有继承”。因此,一切都很好,但是我现在如何使它工作而不在每个派生类中复制此构造函数?我假设有一个更合理的方法? 问题答案: 使用构造