Java 我可以在初始化中进行算术运算吗?

Java 我可以在初始化中进行算术运算吗?,java,arraylist,Java,Arraylist,它应该是8。您在初始化中进行计算。当然,当它被定义为free\u space=capacity-flowers.size()时,它将始终返回0大小,这取决于另外两个参数。这并不意味着它将自动重新计算 但是,这可以在getter的帮助下实现,getter返回计算结果(不需要单独的字段): public int getFreeSpace(){ 返回容量-flowers.size(); } 同样值得重写方法toString,以打印Pot类的快照并调用此getter: @覆盖 公共字符串toStrin

它应该是8。

您在初始化中进行计算。当然,当它被定义为
free\u space=capacity-flowers.size()
时,它将始终返回0大小,这取决于另外两个参数。这并不意味着它将自动重新计算

但是,这可以在getter的帮助下实现,getter返回计算结果(不需要单独的字段):

public int getFreeSpace(){
返回容量-flowers.size();
}
同样值得重写方法
toString
,以打印
Pot
类的快照并调用此getter:

@覆盖
公共字符串toString(){
返回String.format(“花盆:{shape=%s,容量=%d,花数=%d,自由大小=%d}”,
形状,容量,花。大小(),getFreeSpace();
}
测试:

Pot p=新的Pot(“正方形”,8);
System.out.println(p);//花盆:{形状=正方形,容量=8,花数=0,自由尺寸=8}
p、 插入(新花());
System.out.println(p);//花盆:{形状=正方形,容量=8,花数=1,自由尺寸=7}
//等
但是,从引入lambdas和函数接口的Java 8开始,可以用一个字段替换计算getter,在本例中,该字段应为:

publicsupplierfreespace=()->capacity-flowers.size();
然后可以调用此供应商:
freeSpace.get()
,并重新计算实际值


@dariosicily comment之后的更新也可与其方法一起使用:

IntSupplier freeSpace=()->capacity-flowers.size();
System.out.println(freeSpace.getAsInt());
而不是
Supplier
我认为可以使用
IntSupplier
getAsInt
方法。
public class Pot {
    public String shape;
    private int capacity;
    public ArrayList<Flower> flowers = new ArrayList<Flower>();
    public int free_space = capacity - flowers.size(); // why doesn't free_space work?

    public Pot(String shape, int capacity) {
        this.shape = shape;
        this.capacity = capacity;
        System.out.println(capacity); // test
        System.out.println(flowers.size()); // test
        System.out.println(free_space); //test
    }
    
    ....
}

public static void main(String[] args) {
            Pot p = new Pot("square", 8);
            Flower f = new Flower(....);
            .....
            Flower f6 = new Flower(....);
            p.insert(f);
            .....
            p.insert(f6);
}