在安卓中,静态匿名内部类是否可以作为可序列化传递


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)

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

将接口声明为 static 不会使实现它的类成为静态的,因为 static 关键字在应用于接口时是完全冗余的,因为接口无法实例化。您可以将所有接口声明视为隐式包含 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 是一个静态类,它扩展了可序列化,因此没有错误。匿名内部类A(){public void a()}不是静态的,因此即使它扩展了 Serializable,它也会导致错误,因为它将具有对无法序列化的外部类的引用。

最新更新