Преобразование Java в Scala с помощью Generics - PullRequest
2 голосов
/ 27 марта 2019

У меня есть следующий код 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;
}

Я пытаюсь преобразовать его в Scala, и до сих пор я получил:

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
}

Последний не компилируется, и я считаю,это потому, что я не знаю, как изобразить [T] T. Любые предложения, пожалуйста?

1 Ответ

5 голосов
/ 27 марта 2019

Обобщения в сигнатуре метода вызывают ошибку, она должна выглядеть следующим образом:

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

P.S .: В scala символ новой строки sumbol является эквивалентом точки с запятой, вам не нужно их писать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...