Анонимный класс как член класса

Я нашел это в статье. Он реализует Parcelable для передачи данных между действиями в Android.

public class Student implements Parcelable {

public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
    public Student createFromParcel(Parcel in) {
        return new Student(in);
    }

    public Student[] newArray(int size) {
        return new Student[size];
    }
};

private long id;
private String name;
private String grade;

// Constructor
public Student(long id, String name, String grade){
    this.id = id;
    this.name = name;
    this.grade = grade;
}

public long getId() {
    return id;
}

public void setId(long id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getGrade() {
    return grade;
}

public void setGrade(String grade) {
    this.grade = grade;
}

// Parcelling part
   public Student(Parcel in){
       this.id = in.readLong();
       this.name = in.readString();
       this.grade =  in.readString();
   }

@Override
public int describeContents() {
    return 0;
}

@Override
   public void writeToParcel(Parcel dest, int flags) {
    dest.writeLong(this.id);
    dest.writeString(this.name);
    dest.writeString(this.grade);
   }

@Override
public String toString() {
    return "Student{" +
            "id='" + id + '\'' +
            ", name='" + name + '\'' +
            ", grade='" + grade + '\'' +
            '}';
}
}

В этом примере объявляется поле CREATOR и реализует интерфейс Parcelable.Creator. Это анонимный класс. Означает ли это, что анонимные классы также могут быть созданы как члены класса? и я узнал из других источников, что классы Anonymous не могут быть статическими, а здесь он объявлен как статический. Я не понимаю контекст анонимного класса в этом примере. Кто-нибудь может это объяснить?


person Aravind Pulagam    schedule 05.05.2018    source источник
comment
вы можете использовать эту библиотеку github.com/johncarl81/parceler   -  person Rajasekaran M    schedule 05.05.2018


Ответы (1)


Означает ли это, что анонимные классы также могут быть созданы как члены класса?

Вы можете сохранить ссылку экземпляра анонимного класса на поле, да.

и я узнал из других источников, что анонимные классы не могут быть статическими, но здесь он объявлен как статический

Это правда, что анонимные классы не могут быть явно static. Но их можно использовать в статическом контексте (как в опубликованном вами примере — инициализация статического поля), что делает их неявно статическими. Спецификация языка Java описывает это в 15.9.2:

Пусть C будет инстанцируемым классом, а i — создаваемым экземпляром. Если C является внутренним классом, то i может иметь непосредственно включающий экземпляр (§8.1.3), определяется следующим образом:

Если C — анонимный класс, то:

  • Если выражение создания экземпляра класса происходит в статическом контексте, то i не имеет непосредственно охватывающего экземпляра.

  • В противном случае непосредственно включающим экземпляром i является this.

person laalto    schedule 05.05.2018