0
我試圖通過從Activity
到另一個java.util.Stack
對象在一個Android應用程序。安卓:通過一個棧對象到另一個活動導致一個ArrayList
我這樣做是使用的Stack
類實現Serializable
接口的事實,並通過Intent
對象傳遞的對象的方式。
奇怪的是,當我在其他Activity
使用getSerializableExtra(...)
,該對象的類別發生了變化,從Stack
到ArrayList
。
我沒有找到關於互聯網上的任何東西。 你知道它的行爲原因嗎?
由於
下面是一個簡單的代碼,再現事(我想在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
這是一個在Java堆棧發生,因爲是列表http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Stack的子類。 HTML – Aidanc 2012-04-20 14:35:31