【问题标题】:Anonymous class as member of class匿名类作为类成员
【发布时间】:2018-05-05 07:07:29
【问题描述】:

我在一篇文章中发现了这一点。它实现了 Parcelable,用于在 Android 中的 Activity 之间传递数据

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 接口。这是一个匿名类。这是否意味着匿名类也可以作为类的成员创建?我从其他来源了解到匿名类不能是静态的,但在这里它被声明为静态的。我不明白这个例子中匿名类的上下文。有人可以解释一下吗?

【问题讨论】:

标签: android parcelable anonymous-class


【解决方案1】:

这是否意味着匿名类也可以创建为类的成员?

您可以将匿名类实例引用存储到字段,是的。

我从其他来源了解到匿名类不能是静态的,但在这里它被声明为静态

确实,匿名类不能显式地使用static。但是它们可以在静态上下文中使用(如您发布的示例 - 初始化静态字段),这使它们隐含静态。 Java 语言规范在15.9.2 中对此进行了介绍:

令 C 为被实例化的类,让 i 为被创建的实例。如果 C 是一个内部类,那么i 可能有一个立即封闭的实例 (§8.1.3),确定如下:

如果 C 是匿名类,那么:

  • 如果类实例创建表达式出现在静态上下文中,则i 没有直接封闭的实例。

  • 否则,i 的直接封闭实例是this

【讨论】:

    猜你喜欢
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    相关资源
    最近更新 更多