如何使用子类中的 Getters 和 Setters 在超类中添加 ArrayList

问题描述 投票:0回答:1
  • 这是超级类:
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) 返回布尔值。

解决方法是什么?

java inheritance arraylist getter-setter
1个回答
0
投票

有几种方法可以实现这一目标。

更改 Arraylist 变量的可见性。

首先,最简单的方法是将数组列表的可见性更改为

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)
        /** ... **/
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.