내 클래스 A는 생성자에 클래스 B의 인스턴스를 만듭니다. 클래스 B의 생성자는 내부 클래스 C의 인스턴스를 만듭니다. 클래스 C는 생성자에서 클래스의 필드를 필요로합니다. 여기에 문제가 있습니다. 클래스 C는 A 필드의 기본값에만 도달합니다.복잡한 클래스 체인의 클래스 필드에 액세스하는 방법
B 및 C의 시작을 시작하기 전에 A의 생성자에서 A 필드의 값을 초기화합니다. 필드에 필요한 값이 있는지 확인했습니다. 그럼에도 불구하고 C의 생성자에서 해당 필드의 값은 항상 기본 필드입니다. 어떻게 처리해야할지 모르겠습니다. 어떤 도움이 필요합니까?
감사합니다.
모든 답변을 주셔서 감사합니다. 더 많은 정보가 필요하다고 느꼈습니다.
이것은 내 수업 A의 일부입니다. 문제가되는 변수는 startX와 startY입니다. 나는 그들을 생성자에서 직접 정의하거나 setter 메서드를 통해 정의했다. 클래스 B는 DrawView입니다. 클래스 C는 DrawThread입니다. DrawView의 생성자에 인수를 전달하는 방법을 모르겠습니다. 그렇지 않으면 제가 생각합니다. 도움? 또 다른 옵션은/* display = ((WindowManager) getSystemService (Context.WINDOW_SERVICE)). getDefaultDisplay();를 사용하는 것입니다.
DrawView 또는 DrawThread에서 startX 및 startY를 설정하지만 작동하지 않으려 고합니다. 이것은 정말 내 안드로이드에 대한 질문을 전환하고, 모든 제안의 궁극적 인 목표였던 DrawThread의 생성자에서 화면 크기를 얻는 방법에 대해 감사드립니다. :)
공용 클래스 ColorAnimation는 {
public static float startX;
public static float startY;
//other stuff here
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// turn off the window's title bar
requestWindowFeature(Window.FEATURE_NO_TITLE);
// tell system to use the layout defined in our XML file
setContentView(R.layout.main);
/*display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
startX = display.getWidth();
startY = display.getHeight();*/
mDrawView = (DrawView) findViewById(R.id.pend);
mDrawThread = mDrawView.getThread();
// give the DrawView a handle to the TextView used for messages
mDrawView.setTextView((TextView) findViewById(R.id.text));
생성자 클래스 B의 활성 연장 :
//
공개 DrawView (컨텍스트 컨텍스트 속성 세트에 바인드합니다) { 슈퍼 (문맥, 바인드합니다)를; 클래스 C DrawThread의
// register our interest in hearing about changes to our surface
SurfaceHolder holder = getHolder();
holder.addCallback(this);
thread = new DrawThread(holder, context, new Handler() {
@Override
public void handleMessage(Message m) {
mStatusText.setVisibility(m.getData().getInt("viz"));
mStatusText.setText(m.getData().getString("text"));
}
});
setFocusable(true); // make sure we get key events
}
는 // 부분 :
클래스 DrawView은 서피스 뷰 SurfaceView가의 SurfaceHolder.Callback {
class DrawThread extends Thread {//................
//..............
public DrawThread(SurfaceHolder surfaceHolder, Context context,
Handler handler) {
// get handles to some important objects
mSurfaceHolder = surfaceHolder;
mHandler = handler;
mContext = context;
를 구현 확장 당신은 필드 A의 값에 액세스 클래스 A의 함수를 만들 수
음 ... 코드를 제공해 주시겠습니까? 어쩌면 A-B-C 이름 추상화의 유무에 관계없이 요청하는 것과 관련된 클래스의 부분 만 가져갈 수 있습니다. 그것은 소리가 일종의 제대로 작동해야하기 때문에. –
네, 코드는 위이지만 자바보다 더 안드로이드가되었습니다 – Kamelia