我不确定这种情况是否会与泛型相关,而不是 DTOs ,但在这里:
我有一个代表人的DTO。 人可以将儿童其他人(s)或 ResourceLink 作为人强>(S)。这意味着子项可以是以下两种类型之一: Person (DTO)或 ResourceLink 。它的类型是通过 queryParam 确定的,因此在逻辑上通过以下流程确定。我想仅使用 ONE 集合对象来表示它们,并且我不知道最好的方法。
这是我到目前为止所做的:
public class PersonDTO<T> {
@XmlElementWrapper(name = "children")
@XmlElement(name = "child")
List<T> children;
// other stuff
}
通过这种方法,我需要根据if...else
条件定义翻译类型。
之前我有2个不同的集合,其中一个仍然是 NULL 。我还想过在新的DTO中将关系提取出来作为ChildrenDTO(不确定这是不是一个好主意)
我想知道这种情况是否有最佳做法,否则,如果可以根据条件声明PersonDTO<PersonDTO>
或PersonDTO<ResourceLink>
。
提前致谢!
答案 0 :(得分:1)
我建议使用第三种类型的List子元素:
public interface PersonResolver () {
Person resolvePerson ();
}
public class Person implements PersonResolver {
Person resolvePerson () { return this; }
}
public class ResourceLink implements PersonResolver {
Person resolvePerson () {
if (myLinkTargetType == TARGET_TYPE_PERSON)
{ return (Person) myTarget; }
return null;
}
}