数组的setter和getter

时间:2018-07-19 15:38:58

标签: java arrays

我是Java新手,我需要澄清如何解决问题。

我有一个Epicycle类,定义如下:

public class Ts_epicycle {
    private double epoch;
    private double[] tle = new double[10];
}

在另一个类中,Refine我正在调用一个需要tle数组的方法:

// create an instance of Epicycle
Epicycle e = new Epicycle();

methodExample(keps1, keps2, e.tle);

在methodExample中,我将为tle

设置数组值

1)为tle数组创建getter / setter的最佳方法是什么? (以及其他变量)。

2)在methodExample中,我需要传递整个tle数组的参数,而不是它的任何特定索引。我该怎么办。

很抱歉,如果我不清楚的话。

4 个答案:

答案 0 :(得分:4)

实际上是一个有趣的问题:

为了更改获得的数组中的条目不会更改原始对象, 您将需要返回数组的副本不太好。

public class TsEpicycle {
    private double epoch;
    private double[] tle = new double[10];

    public double[] getTLE() {
        return Arrays.copyOf(tle, tle.length);
    }
}

或者,您可以使用List类而不是数组:

public class TsEpicycle {
    private double epoch;
    private List<Double> tle = new ArrayList<>();

    public List<Double> getTLE() {
        return Collections.unmodifiableList(tle);
    }
}

这不会产生副本,但是简单地不允许在运行时更改列表。 这里的效率低下是因为Double对象包装了double。

最好的方法是使用新的Stream类:遍历双打:

public class TsEpicycle {
    private double epoch;
    private double[] tle = new double[10];

    public DoubleStream getTLE() {
        return Stream.of(tle);
    }
}

答案 1 :(得分:1)

作为一般的最佳实践,您需要从另一个类访问的一个类中的每个字段都应提供一个 getter 和(如果该对象是可变的)一个 setter < / em>。

Joop Eggen 所解释的那样,通常是返回副本或代理(例如,引用数组的List / Collection)的一种好习惯,以保留其状态。原始数组。

答案 2 :(得分:0)

如果只允许用户一次编辑一个数组,则可以将synchronized关键字添加到方法签名中。访问数组已经是线程安全的,因此您在那里不需要任何内容​​

例如:

double getTle(int index) {
    return tle[index]
}

synchronized void setTle(int index, double value) {
    tle[index] = value;
}

这仅允许一次调用该方法

答案 3 :(得分:0)

您的数组是java中其他任何对象的对象。

// to declare in initialize your array

private int[] st = new int[10];

//getter and setter 

public int[] getSt() {
        return st;
    }
public void setSt(int[] st) {
        this.st = st;
    }

//for the last method u can use 

public void method(int value)
{
for(int i = 0 ; i<st.lenght ; i++){
st[i] += value; // for exemple
}