2012-04-20 69 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

回答

相关问题