2012-04-20 12 views
0

オブジェクトをActivityから別のアンドロイドアプリに渡そうとしています。Android:Stackオブジェクトを別のアクティビティに渡すとArrayListになります

StackクラスがSerializableインターフェイスを実装し、Intentオブジェクト経由でオブジェクトを渡すということを使用しています。

getSerializableExtra(...)を他のActivityに使用すると、オブジェクトのクラスがStackからArrayListに変更されました。

私はインターネット上でそれについて何も見つかりませんでした。 そのような振る舞いをする理由はありますか?

おかげでここ

がものを再現する簡単なコードです(私はアンドロイド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

答えて