Java POJO对象的JAX-RS通用工厂

Java POJO对象的JAX-RS通用工厂,java,generics,reflection,jersey,jax-rs,Java,Generics,Reflection,Jersey,Jax Rs,我试图解决以下继承问题。我有一个Web服务,其中有几个类可以通过URI访问: 例如,URI: http://localhost:8080/WebApp/data/someData/1 以application/xml形式返回HTTP GET请求,如下所示: <someData> <name>Very Important Data</name> <id>2</id> <description>Seco

我试图解决以下继承问题。我有一个Web服务,其中有几个类可以通过URI访问: 例如,URI:

http://localhost:8080/WebApp/data/someData/1
以application/xml形式返回HTTP GET请求,如下所示:

<someData>
    <name>Very Important Data</name>
    <id>2</id>
    <description>Second Test Data</description>
</someData>
到目前为止,这是可行的。但是,我有几个这样的数据类,我不想每次创建新的数据对象时都编写这个方法。因为为了我的理解 该方法适用于所有对象,除了一行,其中只有返回类型和类描述因对象而异:

SomeData someData = webResource.accept(mediaType).get(SomeData.class);
现在我最初的想法是创建一个继承树,其中根类(即父类)有一个类似于上面所述的create方法的方法。 那么,他们的方法是只实现此方法一次并将其用于从基类继承的所有类吗? 我的直觉告诉我这不管用,但我可能错了

也许更好的解决方案是创建一个静态工厂方法,该方法具有创建对象的类参数。大概是这样的:

public static SomeData create(URI resourceUri) {

    ClientConfig clientConfig = new DefaultClientConfig();
    clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
    Client client = Client.create(clientConfig);
    WebResource webResource = client.resource(resourceUri);

    SomeData someData = webResource.accept(MediaType.APPLICATION_XML).get(SomeData.class);

    return someData;        
}
public class SomeDataFactory {

    public static SomeDataParent create(URI resourceUri, Class<? extends SomeDataParent> clazz) {

        ClientConfig clientConfig = new DefaultClientConfig();
        clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
        Client client = Client.create(clientConfig);
        WebResource webResource = client.resource(resourceUri);

        SomeDataParent someData = webResource.accept(MediaType.APPLICATION_XML).get(clazz);

        return someData;        
    }
}
SomeData someData = (SomeData) SomeDataFactory.create(new URI(http://localhost:8080/WebApp/data/someData/1), SomeData);
SomeData someData = SomeDataFactory.create(yourUri, SomeData.class);
这是否是一个可行的(如良好且有效的)解决方案,只需实施一次?我仍然需要在没有共同点的对象之间进行继承 此外,它们可以从URI创建

使用这种方法,我不喜欢您必须向创建方法添加强制转换。我的意思是应该很清楚这个方法创建了什么,因为我传递了 我要创建的对象

欢迎您的任何意见


您好

实际上,您的代码可以通过这样一种方式得到改进,您不需要对不相关的实体(这是一个非常糟糕的设计决策)和任何强制转换进行继承。这个问题的解决方案是泛型。首先我看了看。它给了我一个线索,我想出了以下代码,编译时没有任何警告,也不包含强制转换:

public static <T> T create(URI resourceUri, Class<T> clazz) {

    ClientConfig clientConfig = new DefaultClientConfig();
    clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
    Client client = Client.create(clientConfig);
    WebResource webResource = client.resource(resourceUri);

    T someData = webResource.accept(MediaType.APPLICATION_XML).get(clazz);

    return someData;        
}

祝你好运

SomeOtherData someOtherData = SomeDataFactory.create(yourUri, SomeOtherData.class);