gpt4 book ai didi

android - 在android中,静态匿名内部类可以作为可序列化传递吗?

转载 作者:行者123 更新时间:2023-11-29 01:35:44 31 4
gpt4 key购买 nike

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)

最佳答案

不,它不能,因为您不能首先将匿名内部类声明为静态。

将接口(interface)声明为静态不会使实现它的类成为静态的,因为 static 关键字在应用于接口(interface)时是完全多余的,因为接口(interface)无法实例化。您可以将所有接口(interface)声明都视为隐式包含 static 关键字。因此,在上面的示例中,您传递的是一个非静态匿名内部类。

但是,您可以声明一个静态内部类并将其作为可序列化的传递,如下所示:

// 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 也会导致错误,因为它会引用外部类'被序列化。

关于android - 在android中,静态匿名内部类可以作为可序列化传递吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28207116/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com