【发布时间】:2021-05-24 11:59:36
【问题描述】:
我有一个班级PagedResult。该类可以帮助我实现具有页面格式的不同对象的 JSON 输出。 E 是包含在列表中的对象。一切正常,但有一件事仍然困扰着我。我希望包含对象的列表并不总是具有相同的名称。我想把名字改成对应的对象。
班级PagedResult:
public class PagedResult<E> {
Long totalItems;
Integer totalPages;
Integer currentPage;
List<E> elements;
[... Getter & Setter ...]
}
带有 MyPojo 这样的对象的实际 JSON 输出如下所示:
{
"totalItems": 2,
"totalPages": 1,
"currentPage": 1,
"elements": [
{
"myPojoAttr1": "hello",
"myPojoAttr2": "there"
},
{
"myPojoAttr1": "hello",
"myPojoAttr2": "folks"
}
]
}
所以对于每个响应,无论是哪个对象,数组都被命名为 "elements"。我不想在我的 JSON 响应中出现丑陋的名称,因为 PagedResult-class 中的对象不断变化。当我收到带有 MyPojo 之类的对象的响应时,JSON-Array 的名称应该是 "myPojos" 并且当我想获得带有 MyWin 之类的对象的响应时,名称应该是 "我的胜利”。
我对@987654330@ 进行了很多尝试,但我找不到方法来实现这个“对象数组名称”也是通用的。有人可以帮我解决这个问题吗?提前致谢。
【问题讨论】:
-
为什么你想要一个与你类中的内容不对应的名称,如果你想要另一个名称,为什么不更改你类中元素的名称?
-
因为
PagedResult-class 应该能够包装不同的对象。我不想为所有不同的对象创建一个PagedResult-class,例如PagedResultMyPojo或PagedResultMyWin因为重复代码。 -
在您的 PagedResult 上下文中,无论它们是什么类型,它们都是“元素”
-
是的。这正是我想通过通用解决方案解决的问题。
-
改用地图?您不能使用泛型从字符串名称创建类。您需要使用字节码生成库,我认为这在您的情况下是多余的。