Jersey DTO的父/子模型

Jersey DTO的父/子模型,jersey,parent-child,dto,Jersey,Parent Child,Dto,我不确定这种情况是否与泛型相关,而不是与DTO相关,但它是这样的: 我有一个DTO,它代表一个人。一个人可以有其他人(s)作为孩子,或者只是资源链接到那些人(s)。这意味着子对象可以是两种类型之一:Person(DTO)或ResourceLink。它将是什么类型,是通过queryParam确定的,因此逻辑上是通过下面的流确定的。我只想用一个集合对象来表示它们,但不知道最好的方法 以下是我到目前为止的情况: public class PersonDTO<T> { @XmlEl

我不确定这种情况是否与泛型相关,而不是与DTO相关,但它是这样的:

我有一个DTO,它代表一个。一个可以有其他(s)作为孩子,或者只是资源链接到那些(s)。这意味着子对象可以是两种类型之一:Person(DTO)或ResourceLink。它将是什么类型,是通过queryParam确定的,因此逻辑上是通过下面的流确定的。我只想用一个集合对象来表示它们,但不知道最好的方法

以下是我到目前为止的情况:

public class PersonDTO<T> {

    @XmlElementWrapper(name = "children")
    @XmlElement(name = "child")
    List<T> children;
    // other stuff

}
public class PersonDTO{
@XmlElementWrapper(name=“children”)
@xmlement(name=“child”)
列出儿童名单;
//其他东西
}
使用这种方法,我需要根据
if…else
条件定义翻译的类型

早些时候,我有两个不同的集合,其中一个保持NULL。我还想用一个新的DTO作为ChildrenDTO(不确定这是不是一个好主意)来提取关系

我想知道是否有针对这种情况的最佳实践,否则,是否可以根据条件声明
PersonDTO
PersonDTO


提前谢谢

我建议使用第三种类型作为列表子元素:

    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;
          }
    }

请原谅我迟了答复。谢谢你的回复。这不会把两个不相关的类型放在同一个继承树中吗?不过,如果一个方法是返回一个人,那么它现在将返回一个PersonResolver,对吗?因此,为了正确使用,它必须被转换回所需的类型,对吗?这里的想法是,只存储PersonResolver类型。然后可以将一个人解析为自己(
Person A;A.resolvePerson()==A
),而您的ResourceLink类型将解析为它所链接的人(
ResourceLink b;b.resolvePerson()==(Person)b.GetTargetToFlink()
)这允许通过允许所有子级正交地生成
个人
,而不是
if(x instanceof Person)
等,来使用类似
List
的容器。至于“继承树”,它只是一个接口——它使类型相互关联;与将两个不相关的类型放入一个容器相比,
Person
必须有一个PersonResolver,它可以引用
Person
ResourceLink
,我们不关心它是什么,因为它将在运行时得到处理。我对这里的IsA不满意,因为我在寻找更多的HasA类型。但我感谢你花时间回答我的问题。我会将它标记为已接受,因为不幸的是,我自己想到了一个没有解析器的接口;但不想关联无关的对象。谢谢