La conversión de Java a Scala con los genéricos

José Cabrera Zuniga:

Tengo el siguiente código Java:

public static <T> T buildSAMLObject(final Class<T> clazz) {
    T object = null;
    try {
        XMLObjectBuilderFactory builderFactory = XMLObjectProviderRegistrySupport.getBuilderFactory();
        QName defaultElementName = (QName)clazz.getDeclaredField("DEFAULT_ELEMENT_NAME").get(null);
        object = (T)builderFactory.getBuilder(defaultElementName).buildObject(defaultElementName);
    } catch (IllegalAccessException e) {
        throw new IllegalArgumentException("Could not create SAML object");
    } catch (NoSuchFieldException e) {
        throw new IllegalArgumentException("Could not create SAML object");
    }

    return object;
}

Estoy tratando de convertirlo en Scala y hasta ahora que tengo:

def buildSAMLObject(clazz: asInstanceOf[T]): [T] T  {
    var obj = builderFactory.getBuilder(defaultElementName).buildObject(defaultElementName).asInstanceOf[T];
    try {
        val builderFactory = XMLObjectProviderRegistrySupport.getBuilderFactory();
        val defaultElementName = clazz.getDeclaredField("DEFAULT_ELEMENT_NAME").get(null).asInstanceOf[QName];
        obj = builderFactory.getBuilder(defaultElementName).buildObject(defaultElementName).asInstanceOf[T];
    } catch 
         {
            case e: IllegalAccessException => throw new IllegalArgumentException("Could not create SAML object")
            case e: NoSuchFieldException   => throw new IllegalArgumentException("Could not create SAML object")
         }

    obj
}

Este último no está compilando y creo que esto se debe a que no sé cómo representar [T] T. Cualquier sugerencia, por favor?

Andrónico:

Genéricos en firma del método hace que el error, que debe ir de esta manera:

def buildSAMLObject[T](clazz: Class[T]): T  = {

PS: En Scala nueva línea sumbol es un equivalente de punto y coma, no es necesario escribirlos.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=118297&siteId=1
Recomendado
Clasificación