Java - 在发送到方法之前递增变量

Mac*_*ado 0 java arrays increment

情况

嗯,这种方法是管理一个接受列表作为参数的转换,但肯定看起来不可扩展.

List<Long> array_list_data= new ArrayList<>();

public void get_Data() {
    long0 = array_list_data.get(0);
    long1= array_list_data.get(1);
    long2= array_list_data.get(2);
}
Run Code Online (Sandbox Code Playgroud)

之后,它将创建一个与long字段不同的类.

问题

但是,如果我们必须将此数据扩展到此列表中的100个参数,该怎么办?

到目前为止我所做的是:

List<Long> array_list_data= new ArrayList<>();

public void get_Data() {
    int k = 0;        
    long0= array_list_data.get(k);
    long1= array_list_data.get(k++);
    long2= array_list_data.get(k++);
}
Run Code Online (Sandbox Code Playgroud)

为什么递增k不是正确的方法呢?

Jon*_*eet 7

k++执行后增量.换句话说,表达式的值是原始k,然后k递增.它在调用方法之前仍然会增加,但作为参数传递的值是增量发生之前的值.换句话说,呼叫:

x = list.get(k++);
Run Code Online (Sandbox Code Playgroud)

相当于:

int tmp = k;
k = k + 1;
x = list.get(tmp);
Run Code Online (Sandbox Code Playgroud)

所以,如果你真的有:

memory_version = array_list_data.get(k++);    // Calls with 0, then k=1
mains_voltage_min = array_list_data.get(k++); // Calls with 1, then k=2
mains_voltage_max = array_list_data.get(k++); // Calls with 2, then k=3
Run Code Online (Sandbox Code Playgroud)

那就没事了,相当于你的第一个代码.你目前的问题是你真的得到了:

memory_version = array_list_data.get(k);      // Calls with 0, then k=0
mains_voltage_min = array_list_data.get(k++); // Calls with 0, then k=1
mains_voltage_max = array_list_data.get(k++); // Calls with 1, then k=2
Run Code Online (Sandbox Code Playgroud)

但是,我建议如果您使用集合作为字段对类中的数据进行建模,那么每个值的单独字段可能会更好.(当然,您可以通过从列表中提取数据来创建类的实例,但这是另一回事.)