首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从google cloud端点返回多态对象

从google cloud端点返回多态对象
EN

Stack Overflow用户
提问于 2015-05-24 01:12:45
回答 1查看 476关注 0票数 3

我只是尝试使用objectify创建具有层次结构的类的实体的多态性。例如,我有一个名为Animal的基本实体,并且有名为Mammal和Reptile的子类,这也是entities。

当我尝试存储和检索数据时,它工作得很好,我可以将基本的Animal类转换为哺乳动物或爬行动物。

但是,当我尝试在google cloud端点中返回一个动物列表时,这种继承不会被保留。我无法在客户端将Animal类转换为哺乳动物或爬行动物。

实际上,google cloud端点正在创建另一个模型类型,该模型类型实际上是在端点中作为JSON返回的,与我们的实体不同,继承不会保留在这些模型类中。

基本上,我需要查询所有的动物,在客户端,根据对象的类型,无论是哺乳动物还是爬行动物,我都会相应地显示UI。

下面是一个示例代码,

我有两个班级:动物和哺乳动物。哺乳动物是动物的一个子类。

代码语言:javascript
复制
Animal annie = new Animal();
annie.name = "Annnnn";
ofy().save().entity(annie).now();

Mammal mam = new Mammal();
mam.name = "Mammmaaaal";
mam.longHair = true;
ofy().save().entity(mam).now();

// This will return the Cat
Animal fetched = ofy().load().type(Animal.class).id(mam.id).now();
return Animal;

我将返回该动物对象,它可能是一个Mammal实例,我应该根据客户端中的实例将其转换为Mammal或animal的任何其他子类。

有没有人对这个问题有任何解决方案或变通办法?

下面是用于检索动物列表的json响应。但我无法在android客户端将动物对象转换为哺乳动物。

代码语言:javascript
复制
{
 "items": [      
  {
   "id": "5631986051842048",
   "name": "mammm",
   "longHair": true,
   "kind": "animalApi#resourcesItem"
  },
  {
   "id": "5697423099822080",
   "name": "Animalll",
   "kind": "animalApi#resourcesItem"
  }
 ],
 "nextPageToken":     "CjwSNmofc35tb3ZpZWFkZGljdC12Mi1kZWJ1Zy1jb2RlaGFyZHITCxIGQW5pbWFsGICAgIDruI8KDBgAIAA",
 "kind": "animalApi#resources",
 "etag": "\"cZTcM4l5N_SjrKcEhGkKJEl9rU4/rs8BjIS52gHgN0B1UGEEi2DERwE\""
}
EN

回答 1

Stack Overflow用户

发布于 2015-05-24 22:57:57

不幸的是,云端点在序列化/反序列化JSON时并不使用实际的类。它使用一个生成的“扁平”POJO类,这个类完全不知道原始类中的任何层次结构。所以当你在你的Android客户端上得到一个"Animal“类的时候,我和其他类一点关系都没有。

你唯一的希望就是发送额外的参数来指示对象的实际类型,并根据Android的大小手动组装相应的实例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30415484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档