gpt4 book ai didi

java - 为什么向数组列表中添加一个新元素会用新元素替换所有以前的元素?

转载 作者:行者123 更新时间:2023-11-29 07:54:07 25 4
gpt4 key购买 nike

我的类 TextPlan 中有一个方法,它调用另一个类 RSTRule 中的所有规则并将所有规则添加到数组列表中。对于此方法,我使用了 import java.lang.reflect.InvocationTargetException 和import java.lang.reflect.Method
但它错误地添加到数组列表中。例如每次调用RST方法时
add(RSTRule)`的结果如下:

 call 1: RSTRules.add(RSTRule)=R1
call 2: RSTRules.add(RSTRule)=R2,R2
call 3: RSTRules.add(RSTRule)=R3,R3,R3
call 4: RSTRules.add(RSTRule)=R4,R4,R4

这意味着每次我添加一个新元素时,它都会从数组列表中删除之前的元素,但会重复添加新元素。

这是我的代码:

public class TextPlan extends ArrayList<Object>  {

RSTRules rstRules=new RSTRules();

public RSTRules produceAllRSTRules(RSTRules rstRules) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
RSTRule rstRule=new RSTRule();
Method[] methods =rstRule.getClass().getMethods();
for (Method method : methods) {
if (method.getName().startsWith("generate")) {
rstRule=(RSTRule)method.invoke(rstRule);
rstRules.add(rstRule) ;
}
}
return rstRules;
}
}

这是我在“RSTRule”中的一个方法,我在“TextPlan”中调用它们来生成所有规则的实例;

public class RSTRule{
protected String ruleName;
protected DiscourseRelation discourseRelation;
protected String ruleNucleus;
protected String ruleSatellite;
protected String condition;
int heuristic;


public RSTRule generateBothAppearBothCosts_Join(){
this.discourseRelation=DiscourseRelation.Join;
this.ruleNucleus="BothProductAppear_Elaboration";
this.ruleSatellite="BothProductCost_Elaboration";
this.ruleName="BothProductAppearAndBothProductCost_Join";
this.condition=null;
this.heuristic=9;
return this;
}
}

最佳答案

您并没有向列表中添加四个新的 RSTRule 实例,而是将相同的 RSTRule 实例添加了四次,并且每次都对其进行修改。由于它是同一个实例存储了四次,因此修改会出现在列表的每个位置。

关于java - 为什么向数组列表中添加一个新元素会用新元素替换所有以前的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19087561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com