2011-11-20 2 views
2

Activity에서 toString() 메서드를 구현 한 것이 내가하는 일과 관계없이 호출되는 것 같지 않습니다. 나는 항상 java.lang.Object (예 : Ljava.lang.Object;@4059d6a8)의 결과를 얻습니다. "나는 불려졌습니다!". 많은 기사를 읽고 많은 코드를 스캔했는데 내가 잘못하고있는 것을 파악할 수 없습니다. 제발 누군가에게 설명해 주시겠습니까? 어떻게 메소드를 재정의 할 수 있습니까? 내 코드 :Android에서 toString() 메소드의 @Override가 호출되지 않는 이유는 무엇입니까?

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!"; 
    } 
} 

미리 감사드립니다.

답변

3

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(); 

같은 짓을합니다. 형식은 List 구현의 toString() 메서드에 의해 결정됩니다.

+0

고마워요! 그게 정확히 내가 필요한 것입니다 :) – Lukas

6

OverrideTestActivity 클래스의 toString() 메서드를 재정의하고 개체 배열에 대해 toString()을 호출합니다. 이것이 바로 Object 클래스의 기본 구현을 얻는 이유입니다.

+1

jkschneider의 답변을 실제로 문제를 해결 한 것으로 받아 들일 것입니다. 그러나 많은 것을 이해합니다, 명료화에 감사드립니다! – Lukas

관련 문제