如果我的对象有不同的层次结构,有没有办法重用代码?

时间:2017-07-04 21:08:02

标签: java generics reflection dozer

我的问题是我正在处理2个不同的jaxb生成的对象层次结构。这些对象具有相同的名称,99.9%的结构相同,但它们位于不同的包中:

 xy.z.fpml.transparency.IdentifiedCurrency
 xy.z.fpml.recordkeeping.IdentifiedCurrency

正如您可能想象的那样,我无法修改对象,它们没有任何共同点可以链接到,没有超类或接口等等。

IntelliJ说它是重复的代码,但是我的双手并列。有没有办法做一种接受这两种对象的泛型方法?也许有些反思? (我很抱歉,我可以......)

2 个答案:

答案 0 :(得分:1)

如果这些类来自jaxb,那么你可能需要维护它们的源代码,一些XSD或Schema文档,而不是生成的类本身。

如果问题仅出在IDE警告中,那么为此案例添加例外并忘记它们。

答案 1 :(得分:0)

我认为避免代码重复的唯一方法是使用Dozer或BeanUtils来创建对象的deepCopy。

 private xy.z.fpml.transparency.IdentifiedCurrency getIdentifiedCurrency(String value) {
    xy.z.fpml.transparency.IdentifiedCurrency identifiedCurrency = new IdentifiedCurrency();
    identifiedCurrency.setCurrencyScheme(SCHEMA);
    identifiedCurrency.setValue(value);
    return identifiedCurrency;
}

 private xy.z.fpml.recordkeeping.IdentifiedCurrency getIdentifiedCurrency(String value) {
    xy.z.fpml.transparency.IdentifiedCurrency currency = getIdentifiedCurrency(value);
    xy.z.fpml.recordkeeping.IdentifiedCurrencycurrency copy = new ...();
    BeanUtils.copyProperties(currency , copy );  
    return identifiedCurrency;
}

对于第二层次结构,我将使用另一种方法调用第一层并复制结果。我添加的只是一个简单的例子,它可能看起来有点开销,因为我们有相同数量的行,但有方法重复50-100行,总共有一个完整的层次结构重复。

你认为有更好的方法吗?

相关问题