【发布时间】:2019-08-18 10:51:30
【问题描述】:
我有下一个 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。请有什么建议吗?
【问题讨论】:
-
这里没有理由在 Java 或 Scala 中将
object设为可变变量。只需在 Java 中的块内执行return并使用在 Scala 中返回最后一个值的事实。
标签: java scala generics playframework try-catch