0
객체를 Activity
의 객체로 안드로이드 앱으로 전달하려고합니다.안드로이드 : 스택 객체를 다른 액티비티에 전달하면 ArrayList가됩니다.
내가하는 방법은 Stack
클래스가 Serializable
인터페이스를 구현하고 Intent
개체를 통해 개체를 전달한다는 사실을 사용하는 것입니다.
다른 Activity
에 getSerializableExtra(...)
을 사용하면 객체 클래스가 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
Java Stack이 List http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Stack의 하위 클래스이기 때문에 이러한 현상이 발생합니다. HTML – Aidanc