java - 如何访问复杂的类链中的类字段

标签 java android constructor-chaining

我的类 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/

相关文章:

java - 测试中未抛出 NullPointerExceptions

java - Android 应用程序与服务器通信无法正常工作

java - 在 Java 中链接构造函数而不从默认构造函数抛出异常

c# - 如何在 C# 中进行构造函数链接

java - NAT 网络正在合并 session

java - syncAdapter、services、loaders、providers 和 asynctask 之间的混淆?

android - OpenGL ES 深度缓冲 android,无法开始工作

android - 添加 Activity 后无法编译应用

java - Java 中的链接构造函数

java - 无法在真实设备上安装 apk