Почему мой метод @Override toString () никогда не вызывается на Android? - PullRequest
2 голосов
/ 20 ноября 2011

Кажется, что моя реализация метода toString() в Activity никогда не вызывается, независимо от того, что я делаю. Я всегда получаю результат от java.lang.Object (например, Ljava.lang.Object;@4059d6a8) вместо "Я был вызван!". Я прочитал кучу статей и просмотрел много кода, и я не могу понять, что я делаю неправильно. Может кто-нибудь объяснить мне, как переопределить метод? Это мой код:

public class OverrideTestActivity extends Activity {
    private int number = 27;
    private String[] items = { "MyFirstItem", "MySecondItem" };
    public Object[] stuff = { number, items };

    @Override
    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.test);
        OverrideTest();
    }

    public void OverrideTest() {
        TextView result = (TextView) findViewById(R.id.textView1);
        result.setText(stuff.toString());
    }

    @Override
    public String toString() {
        return "I was called!";
    }
}

Заранее большое спасибо!

Ответы [ 2 ]

6 голосов
/ 20 ноября 2011

Вы переопределяете метод toString() для класса OverrideTestActivity и вызываете toString() для массива объектов: поэтому вы получаете реализацию класса Object по умолчанию.

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

В этом случае toString() вызывается только для объектов типа OverrideTestActivity.

Вместо этого вы вызываете toString () для массива, который не имеет такой реализации.

private int number = 27;
private String[] items = { "MyFirstItem", "MySecondItem" };
public Object[] stuff = { number, items }; 

Если вы сделали что-то подобное

List<Object> stuff = Arrays.asList(27, "MyFirstItem", "MySecondItem");
stuff.toString();

Вы обнаружите, что он выводит формат, который представляет содержимое списка.Формат будет определен методом toString() в реализации List.

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