我在 Java 应用程序中使用 Play Framework 2.1.5。
我有一个将通用对象列表作为参数的视图组件。在这个组件中,我想迭代列表并获取每个元素的一些属性。
这看起来像这样:
@(elements: List[_])
@for((element, i) <- elements.view.zipWithIndex) {
@i
@element.id
@element.name
}
(我需要这 3 个值)
但是,当然,即使我放在列表中的对象类型包含这些方法,也不会编译element.id
。element.name
所以我这样做了:
@for((element, i) <- elements.view.zipWithIndex) {
@defining(
ViewsUtils.getGenericElementId(element),
ViewsUtils.getGenericElementName(element)) {
case (id, name, something) =>
@i
@id
@name
}
}
在 Java 实用程序类中:
public final class ViewsUtils {
public static String getGenericElementId(Object object) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
return object.getClass().getMethod("getId").invoke(object).toString();
}
public static String getGenericElementName(Object object) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
return object.getClass().getMethod("getName").invoke(object).toString();
}
}
这可行,但我知道这是不对的,因为如果我放入列表中的对象类型不存在这些方法之一,它可能会抛出 RuntimeException。
以下是我的假设:
铸造元素
使用继承
因为我只需要每个对象的 2 个属性(id 和名称),我可以使用地图,但我需要循环的索引(是否可以从地图中获取它?)如果我需要它就行不通超过2个属性。
也许 Scala 为这类东西提供了语法。
或者,也许我只是在寻找错误的方向。
谢谢您的帮助。