public abstract class ImperialCluster implements Serializable,Clusterable {
private static final long serialVersionUID = 1L;
private String clusterType;
private ArrayList<Alpha> alphas;
private ArrayList<Beta> betas;
private ArrayList<Gamma> gammas;
public ImperialCluster() {
this.alphas = new ArrayList<>();
this.betas = new ArrayList<>();
this.gammas = new ArrayList<>();
}
public String getClusterType() {
return clusterType;
}
public ArrayList<Alpha> getAlphas() {
return alphas;
}
public ArrayList<Beta> getBetas() {
return betas;
}
public ArrayList<Gamma> getGammas() {
return gammas;
}
public void setClusterType(String clusterType) {
this.clusterType = clusterType;
}
public void setAlphas(ArrayList<Alpha> alphas) {
this.alphas = alphas;
}
public void setBetas(ArrayList<Beta> betas) {
this.betas = betas;
}
public void setGammas(ArrayList<Gamma> gammas) {
this.gammas = gammas;
}
@Override
public String toString() {
return this.clusterType
+ "\nCluster Type: " + this.clusterType
+ "Alpha Particles: " + this.alphas.size()
+ "Beta Particles: " + this.betas.size()
+ "Gamma Particles: " + this.gammas.size()
+ gammas + ", getClusterType()=" + getClusterType() + ", getAlphas()=" + getAlphas() + ", getBetas()="
+ getBetas() + ", getGammas()=" + getGammas() + ", getClass()=" + getClass() + ", hashCode()="
+ hashCode() + ", toString()=" + super.toString() + "]";
}
}
public class Meson extends ImperialCluster {
private static final long serialVersionUID = 1L;
public Meson() {
Alpha A = new Alpha();
Beta B = new Beta();
Gamma G = new Gamma();
getAlphas().add(A);
this.setAlphas(getAlphas().add(A));
this.setBetas(getBetas().add(B));
this.setClusterType("Meson");
}
@Override
public void displayCluster() {
System.out.println(toString());
}
}
我想向 alphas ArrayList 添加一个 alpha 对象,向 betas ArrayList 添加一个 Beta 对象。
this.setAlphas(getAlphas().add(A));
提供错误,因为 .add(A) 返回布尔值。
解决方法是什么?
有几种方法可以实现这一目标。
首先,最简单的方法是将数组列表的可见性更改为
protected
。 protected
可见性允许子类访问父类属性,但不能访问外部类。通过拥有受保护的属性,您可以直接在数组列表上调用 add
函数:
public abstract class ImperialCluster implements Serializable,Clusterable {
/** ... **/
protected ArrayList<Alpha> alphas;
/** ... **/
}
public class Meson extends ImperialCluster {
public Meson() {
/** ... **/
this.alphas.add(A);
/** ... **/
}
}
add
操作分为三步另一种方法是将
add
函数调用和 setAlphas
调用拆分为三个单独的步骤,并使用变量。
第一步是获取
alphas
数组列表并将其分配给临时变量:
public class Meson extends ImperialCluster {
public Meson() {
/** ... **/
ArrayList currentAlphas = getAlphas();
/** ... **/
}
}
然后,您可以将新的 alpha 推入临时变量,就像您已经在做的那样。
public class Meson extends ImperialCluster {
public Meson() {
/** ... **/
Alpha A = new Alpha()
ArrayList currentAlphas = getAlphas();
currentAlphas.add(A)
/** ... **/
}
}
最后,您可以像以前一样使用
setAlphas
,但使用更新的临时变量。这会将父类中的 alphas
更新为您刚刚创建的临时变量。
public class Meson extends ImperialCluster {
public Meson() {
/** ... **/
Alpha A = new Alpha()
ArrayList currentAlphas = getAlphas();
currentAlphas.add(A)
this.setAlphas(currentAlphas)
/** ... **/
}
}
addAlpha
函数绕过此问题的最后一种方法可能是在父类中创建一个新函数,该函数将自行处理
add
。然后,您只需使用 A
变量调用这个新函数,并让它处理将值推送到 alphas
ArrayList 中。
public abstract class ImperialCluster implements Serializable,Clusterable {
/** ... **/
public void addAlpha(Alpha A) {
this.alphas.add(A)
}
/** ... **/
}
public class Meson extends ImperialCluster {
public Meson() {
/** ... **/
Alpha A = new Alpha()
this.addAlpha(A)
/** ... **/
}
}