2012-04-20 27 views
0

我試圖通過從Activity到另一個java.util.Stack對象在一個Android應用程序。安卓:通過一個棧對象到另一個活動導致一個ArrayList

我這樣做是使用的Stack類實現Serializable接口的事實,並通過Intent對象傳遞的對象的方式。

奇怪的是,當我在其他Activity使用getSerializableExtra(...),該對象的類別發生了變化,從StackArrayList

我沒有找到關於互聯網上的任何東西。 你知道它的行爲原因嗎?

由於

下面是一個簡單的代碼,再現事(我想在Android 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類:

輸出的 Log.i(...)
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; 
    } 
} 

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堆棧發生,因爲是列表http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Stack的子類。 HTML – Aidanc 2012-04-20 14:35:31

回答

相關問題