Как изменить все ссылки на один массив на ноль в Java - PullRequest
2 голосов
/ 18 ноября 2011

У меня есть несколько методов, каждый из которых содержит ссылку на один массив. В одном методе, где у меня есть такая ссылка, я хочу изменить массив на null. Проблема в том, что я не просто хочу изменить одну ссылку на null, но все они. У Java есть способ сделать это?

public void moo()
{
    boolean[] cow = new boolean[10];
    baa(cow);

    assertEquals(true, cow == null);
}

private void baa(boolean[] sheep)
{
    *do stuff*
}

Другими словами, что я могу сделать в baa() для овец, чтобы arr было null, а утверждение в moo истинно?

Спасибо!

Ответы [ 4 ]

3 голосов
/ 18 ноября 2011

Короткий ответ: нет, вы не можете.cow является ссылкой на фактический массив, и вы передаете копию cow методу baa.Невозможно изменить исходную ссылку без использования какой-либо хитрости.

Однако вы можете использовать одну хитрость - написать собственный класс-обертку.Таким образом, вы можете передать ссылку на ссылку на cow.

public class CowWrapper {
    public boolean[]cow;
    public CowWrapper(boolean[]cow){
        this.cow=cow;
    }
}
public void moo() {
    CowWrapper cow=new CowWrapper(new boolean[10]);
    baa(cow);
    assertNull(cow.cow);
}
public void baa(CowWrapper sheep) {
    sheep.cow=null;
}
1 голос
/ 18 ноября 2011

Если я вас понимаю, ничего.

Вы не можете изменить аргументы на методы. Это копии.

Ваши assertEquals, как написано, всегда будут неудачными.

0 голосов
/ 18 ноября 2011

Вы можете изменить массив в baa() и заставить baa() возвращать boolean[] вместо void():

public void moo()
{
    boolean[] cow = new boolean[10];
    cow = baa(cow);
    System.out.println((cow == null) ? "True" : "False");
}

private boolean[] baa(boolean[] sheep)
{
    sheep = null;
    return sheep;
}
0 голосов
/ 18 ноября 2011

Если arr является полем в классе, arr = null; должно подойти. Вы не можете ничего сделать с sheep в baa, чтобы сделать arr нулевым.

Если arr не является полем в классе, откуда оно взято в вашем коде?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...