使用泛型将 java 转换为 Scala

Converting java to scala with Generics

我有下一个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。有什么建议吗?

方法签名中的泛型导致错误,应该是这样的:

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

P.S.: 在scala newline sumbol相当于分号,你不需要写它们。