Java 为来自不同包的对象创建公共转换器

Java 为来自不同包的对象创建公共转换器,java,web-services,generics,Java,Web Services,Generics,我有5个Web服务,A、B、C、D和E。每个Web服务都有完全相同结构的自动生成对象,但具有不同的名称和不同的包 com.ws.a.carA contains parameters and com.ws.a.wheelA com.ws.b.carB contains parameters and com.ws.b.wheelB com.ws.c.carC contains parameters and com.ws.c.wheelC com.ws.d.carD contains para

我有5个Web服务,A、B、C、D和E。每个Web服务都有完全相同结构的自动生成对象,但具有不同的名称和不同的包

com.ws.a.carA contains  parameters and com.ws.a.wheelA
com.ws.b.carB contains  parameters and com.ws.b.wheelB
com.ws.c.carC contains  parameters and com.ws.c.wheelC
com.ws.d.carD contains  parameters and com.ws.d.wheelD
com.ws.e.carE contains  parameters and com.ws.e.wheelE
我想创建一个函数,可以将这些对象(和内轮)转换为一个名为

com.model.car,
但我不想要很多功能,比如:

com.model.car convert(com.ws.a.objA obj)
com.model.car convert(com.ws.b.objB obj)

问题是,我不能给所有对象一个公共接口来实现,因为我不想手动更改自动生成的类(它们经常被重新创建)

我需要一种方法,可能是泛型,来创建一个公共函数

com.model.car convert(T obj)

<>这将适用于所有的汽车类型,但我不知道如何实现它。

< P>我认为你应该考虑使用.< /P> < P>你可以使用反射来进行这项工作。最简单、最干净的方法可能是使用,或者

PropertyUtils#copyProperties将值从一个对象复制到另一个对象,其中字段名相同。因此,对于copyProperties(dest,orig),它为两个对象中存在的所有字段调用dest.setFoo(orig.getFoo())


BeanUtils#copyProperties也有相同的功能,但您可以注册转换器,以便在必要时将值从字符串转换为Int。有许多标准转换器,但您可以注册自己的转换器,例如com.ws.a.wheelA到com.model.wheel或其他任何类型。

您也可以使用commons beanutils library签出您可以执行以下实用程序类:

public class BeanUtilCopy {
    private static BeanUtilsBean beanUtilsBean;
    private static ConvertUtilsBean convertUtilsBean = new ConvertUtilsBean();
    static {                   
        convertUtilsBean.register(new Converter() { //2
            public <T> T convert(Class<T> type, Object value) {
                T dest = null;
                try {
                    dest = type.newInstance();
                    BeanUtils.copyProperties(dest, value);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return dest;
            }
        }, Wheel.class);
    beanUtilsBean = new BeanUtilsBean(convertUtilsBean);
}

    public static void copyBean(Object dest, Object orig) throws Exception {
        beanUtilsBean.copyProperties(dest, orig); //1
    }
输出:

    CarB carB = new CarB();
    carB.setName("car B name");
    carB.setWeight(115);
    WheelB wheelB = new WheelB();
    wheelB.setName("wheel B name");
    wheelB.setType(05);

    carB.setWheel(wheelB);

    Car car1 = new Car();
    BeanUtilCopy.copyBean(car1, carB);

    System.out.println(car1.getName());
    System.out.println(car1.getWeight());
    System.out.println(car1.getWheel().getName());
    System.out.println(car1.getWheel().getType());
车名

115

车轮B名称

五,