【发布时间】:2014-10-16 23:27:14
【问题描述】:
我有一个引用两个子对象的对象,我将它返回给视图,就像我对任何其他变量所做的一样。
public class Object1 extends ArrayList<Object2> {
private List<Object2> obj2 = new ArrayList<Object2>;
private Object3 obj3;
public List<Object2> getObject2() {
return this.obj2;
}
public Object3 getObject3() {
return this.obj3;
}
@Override
public boolean add(Object2 o2) {
//some other code goes here
return super.add(o2);
}
}
public class Object2 {
int applianceId;
String status;
}
public class Object3 {
int member3;
String member4;
}
Object1 在我的模板中分配给变量 obj1。问题是如果我打电话给getObject2(),我什么也得不到,尽管我可以访问getObject3() 就好了。真正奇怪的是,如果我在没有 getter 的情况下访问 obj1,它包含应该由 getObject2() 返回的所有内容。
所以,我希望这可以工作,但它没有:
@for(a <-obj1.getObject2()){
@a.member1
@a.member2
}
它什么也不返回。
但是,这确实会返回来自对象 2 的数据:
@for(a <-obj1){
@a.applianceId
@a.status
}
结果是:3046 GREEN 3066 GREEN 3086 GREEN 3126 RED 3166 RED 3026 RED 3146 RED
谁能解释为什么会发生这种情况以及如何纠正它?
【问题讨论】:
-
能否提供编译错误!?
-
这没有意义。 1)您有两个同名的私有字段; 2)您的字段是私有的,并且没有设置器/参数构造函数:这些字段是如何分配的?
-
没有编译器错误,也没有运行时错误。我的期望是,如果我有两个 getter,我应该能够从视图中调用它们并检索它们的内容,但事实并非如此。我只能通过它的 getter 检索对象。另一个对象的内容是 PARENT 对象本身的一部分,而不是 getter。这不是正确的行为。我还纠正了上面示例代码中的一个错误。
-
“它什么也不返回”是什么意思,
obj1.getObject2()是否返回 null,a是否为 null,空字段,什么?但是问题似乎不在您发布的代码中,我们不知道您的其余代码在做什么,但我怀疑您在没有向我们展示的地方犯了错误,您能否发布一个 sscce。 -
我修改了上面的代码以更接近真实世界的代码。这个问题似乎源于 Object1 扩展了 ArrayList
的事实。我所做的只是重写 add() 方法,这样我就可以插入一些额外的功能。删除“扩展 ArrayList ”解决了这个问题,虽然我不明白为什么扩展 ArrayList 类会导致这个问题。
标签: java playframework