我的类 A 在其构造函数中创建了类 B 的实例。类 B 的构造函数创建了其内部类 C 的实例。类 C 在其构造函数中需要类 A 的一个字段,这就是问题所在。 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,但它就是不想工作。 这确实让我的问题更多地转向了 android,我将感谢任何关于如何在 DrawThread 的构造函数中获取屏幕尺寸的建议,这是所有这一切的最终目标:)?
公共(public)类 ColorAnimation 扩展了 Activity {
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类的构造函数:
//
公共(public)DrawView(上下文上下文,AttributeSet attrs){ super (上下文,属性);
// 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
}
//C类DrawThread的一部分:
类 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 的构造函数完成(这意味着 B 和 C 的构造函数已完成)之前,最好假设您无权访问 A 的完全构造和填充的实例。您应该向下传递将您为 A.field 设置的值放入类 B 的构造函数中并以这种方式引用它。
关于java - 如何访问复杂的类链中的类字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7892306/