検索

ホームページ  >  に質問  >  本文

activity - Android中抽象方法赋值时出现null.

首先先声明两个类

public class Person {
   .....
}

public class Student {
    public Person A;
    public Student(Person a) {
        A = a;
    }
    .....
}

MainActivity在实现抽象activity时出现空的返回值

public abstract class Main2Activity extends AppCompatActivity{
    Student B = getStudent();
    oncreate(...){
    ......
        getStudent().getA();
        //A不为null
        B.getA();
        //A为null
    }
    public abstract Student getStudent();
}

MainActivity

public class MainActivity extends Main2Activity{
    Person person = new Person(10);
    @Override
    public Student getStudent() {
        Student student = new Student(person);
        return student;
    }
}

为什么会出现成员变量A为null的情况,但是在声明周期中赋值时并不会出现这个问题.两种情况下成员变量B都不会是null,请问是我哪里理解错误了.

阿神阿神2773日前426

全員に返信(1)返信します

  • 巴扎黑

    巴扎黑2017-04-17 17:51:13

    これは、クラスの初期化時のパラメータの割り当ての順序に問題があります。
    サブクラス、つまり MainActivity が初期化されると、親クラス、つまり Main2Activity が最初に初期化されます。このとき、Main2Activity で定義された Student B には初期値を割り当てる必要があり、初期値は getStudent() メソッドから取得されるため、このメソッドが実行されます。ただし、このメソッドの実行中、使用される MainActivity 内の Person person には実際には初期値が割り当てられておらず、まだ null であるため、getStudent() で参照される personnull になります。これにより、後で getA() が呼び出されたときに null が返されます。
    MainActivityPerson person の代入はサブクラス内で、つまり Main2Activity の初期化操作が完了した後に行われます。この時点では、Student B はすでに代入されているため、この時点では Person person は再度割り当てられますが、実際には、Student B で参照される Person は変更できません。

    返事
    0
  • キャンセル返事