3

複数のルート要素があるため、記述する必要があります

JAXBElement<BookType> jaxbBookType = objectFactory.createBookType (bookType);
JAXBElement<OrderType> jaxbOrderType = objectFactory.createOrderType (orderType);

等々。このコードを何度も書きたくありません。入力に基づいて JAXBElement を返すメソッドを作成しようとしています。

私が書こうとしているのは

public <T> JAXBElement<T> getJaxbElement (Object obj){
    if (obj instanceof OrderType){
        return objectFactory.createOrderType((OrderType)obj);
    }
}

しかし、明らかに、私はそれを間違っています。私はジェネリックについてあまり知らないので、しばらく読んだ後でもまだ混乱しています。誰かがここで私を少し助けてくれますか。

4

4 に答える 4

3

instanceofパラメータで演算子を使用すると想定できる場合は、キャストするJAXBElement<T>だけで十分です。

public <T> JAXBElement<T> getJaxbElement (Object obj){
    Object ret;
    if (obj instanceof OrderType){
        ret = objectFactory.createOrderType((OrderType)obj);
    }
    else if (obj instanceof BookType){
        ret = objectFactory.createBookType((BookType)obj);
    }
    return (JAXBElement<T>) ret;
}

ここで動的でなければならないメソッド名であるため、できない場合は、リフレクションを使用する可能性があります(常に信頼性が低く、あらゆる種類の問題で裏目に出る可能性があります)。

Class実行時に利用できるように、 ofも渡す必要があることに注意してくださいT( を実行することはできませんT.getName())。

public <T> JAXBElement<T> getJaxbElement (Object obj, Class<T> clazz){
    ObjectFactory objectFactory = getObjectFactory();
    String methodName = "create" +  clazz.getName();
    Method m = objectFactory.getClass().getDeclaredMethod(methodName, clazz);
    Object ret = m.invoke(objectFactory, obj);
    return (JAXBElement<T>) ret;
}
于 2012-09-27T16:39:31.350 に答える
0
public <T> JAXBElement<T> getJaxbElement (Object obj){
    if (obj instanceof OrderType){
        return (JAXBElement<T>)objectFactory.createOrderType((OrderType)obj);
    }
}

または、T obj の型を作成する可能性があります

public <T> JAXBElement<T> getJaxbElement (T obj){
    if (obj instanceof OrderType){
        return (JAXBElement<T>)objectFactory.createOrderType((OrderType)obj);
    }
}
于 2012-09-27T17:39:39.327 に答える