【问题标题】:Passing values directly to setter method using for loop使用for循环将值直接传递给setter方法
【发布时间】:2017-11-24 00:07:15
【问题描述】:

这是我的 getter 和 setter:

private int[] test;

public int[] getTest() {
    return Arrays.copyOf(test, test.length);
}

public void setTest(int[] test) {
    this.test= Arrays.copyOf(test, test.length);
}

这是我手动将值传递给 setter 方法的代码

Sample sample = new Sample();   
sample.setTest(new int[]{0,1,2,3});

我想要的是这样的:

for (int i = 0; i < 3; i++) {
    //code here for passing the value to the setter
}

这对我有用,有没有办法使用 for 循环传递这些值?另外我想知道如何将数组作为一个整体传入?

【问题讨论】:

  • 不清楚你的意思。你能举个例子说明你想写什么吗?
  • for (int i = 0; i &gt; 3; i++) 我想你的意思是i &lt; 3
  • 您可以将值推送到循环中的数组中并通过 setter 或创建另一个方法来将单个值推送到您的私有属性。
  • 不过,好问题 ;-)
  • @GhostCat 谢谢 :) 希望这个问题对其他人也有帮助:)

标签: java arrays for-loop getter-setter


【解决方案1】:

nbokmans 的答案是正确的;但我建议您退后一步,看看您的要求。

我的意思是:你应该决定是否需要

  • 允许将数组作为一个整体传入的接口
  • 允许传入单个值的接口

换句话说:如果您向该字段添加单个值是常见的事情......那么您应该设计你的界面相应地。像这样:

public class Whatever {
  private final List<Integer> data = new ArrayList<>();

  public void append(int value) {
    data.add(value);
  }

  public void getData() {
    return new ArrayList<>(data);
  }

例如。

【讨论】:

  • 感谢您的回答并向我解释,我想要的是一个允许传入整个数组的接口。我会更新我的问题。
【解决方案2】:

不,您不能将 for-loop 作为新 test 数组值的值传递。

您可以做的是编写一个单独的函数,从 for-loop 中为您生成一个 int 数组:

public int[] getNumbers(int start, int end, int increment) {
    List<Integer> values = new ArrayList<>(); 
    for (int i = start; i < end; i += increment) {
        values.add(i);
    }
    return values.stream().mapToInt(i->i).toArray();
}

然后可以这样使用(根据您问题中的for-loop):

sample.setTest(getNumbers(0, 3, 1));

或者对于更简单的数组(所以只是从 startNumber 到 endNumber 的整数范围,增量为 1),您可以执行以下操作:

sample.setTest(IntStream.rangeClosed(1, 10).toArray());

【讨论】:

  • 感谢您的回答并为我提供其他选择! :)
  • 真的很好 ;-),喜欢它......你们也“很好”,省略了一个微妙的细节,让我可以提出另一个答案 ;-) x2
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-05
  • 2014-02-28
  • 1970-01-01
  • 1970-01-01
  • 2013-11-04
  • 2019-09-16
  • 2012-07-20
相关资源
最近更新 更多