2012-04-20 2 views
0

객체를 Activity의 객체로 안드로이드 앱으로 전달하려고합니다.안드로이드 : 스택 객체를 다른 액티비티에 전달하면 ArrayList가됩니다.

내가하는 방법은 Stack 클래스가 Serializable 인터페이스를 구현하고 Intent 개체를 통해 개체를 전달한다는 사실을 사용하는 것입니다.

다른 ActivitygetSerializableExtra(...)을 사용하면 객체 클래스가 Stack에서 ArrayList으로 변경되었습니다.

나는 인터넷에서 그것에 대해 아무것도 발견하지 못했습니다. 그것이 그처럼 행동하는 이유를 알고 있습니까?

덕분에 여기

이 일을 재현하는 간단한 코드입니다 (I는 안드로이드 2.3.3와 4.0.3에 시도) :

클래스 A :

package my.test; 

import java.util.Stack; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 

public class A extends Activity { 

    Stack<Integer> stack; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     stack = new Stack<Integer>(); 
     stack.push(42); 
     stack.push(7); 

     Log.i("Class of stack in A (1)",stack.getClass().getName()); 

     Intent i = new Intent(this,B.class); 
     i.putExtra("stack", stack); 

     Log.i("Class of stack in A (2)",i.getSerializableExtra("stack").getClass().getName()); 

     startActivity(i); 

    } 
} 

클래스 B :

package my.test; 

import java.io.Serializable; 
import java.util.Stack; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 

public class B extends Activity { 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Intent i = getIntent(); 
     Serializable s = i.getSerializableExtra("stack"); 

     Log.i("class of stack in B",s.getClass().getName()); 

     Stack<Integer> stack = (Stack<Integer>) s; 
    } 
} 

출력 Log.i(...)의 :

04-20 15:36:56.596: I/Class of stack in A (1)(748): java.util.Stack 
04-20 15:36:56.596: I/Class of stack in A (2)(748): java.util.Stack 
04-20 15:36:56.736: I/class of stack in B(748): java.util.ArrayList 
+1

Java Stack이 List http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Stack의 하위 클래스이기 때문에 이러한 현상이 발생합니다. HTML – Aidanc

답변

관련 문제