static interface A extends Serializable{void a();}
Intent it = new Intent(WelcomeActivity.this, c);
it.putExtra("simplekey", new A(){
@Override
public void a() {
}
});
startActivity(it);
这会引发IOexception
:
not serializable object(XX.XXXAcitivty$1$1)
答案 0 :(得分:1)
不,它不能,因为你不能首先将匿名内部类声明为静态。
将接口声明为静态不会使实现它的类成为静态,因为静态关键字在应用于接口时完全是冗余的,因为接口无法实例化。您可以将所有接口声明视为隐式包含static关键字。所以在上面的例子中,你传递的是一个非静态的匿名内部类。
但是,您可以声明一个静态内部类并将其作为Serializable传递,如下所示:
// this static keyword doesn't make any difference:
static interface A extends Serializable{void a();}
// this static keyword DOES make a difference:
static class B implements A
{
private static final long serialVersionUID = 1L;
@Override
public void a() {
}
}
和
Intent it = new Intent(WelcomeActivity.this, c);
it.putExtra("simplekey", new B());
startActivity(it);
B是一个静态类,它扩展了Serializable,因此没有错误。匿名内部类A(){public void a()}
不是静态的,因此即使它扩展了Serializable也会导致错误,因为它将引用一个无法序列化的外部类。