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