一个接口能够扩展Serializable接口吗?

22

是否可以创建一个扩展Serializable接口的接口?

如果可以,那么这个扩展接口是否会像Serializable接口一样工作?如果不行,为什么?


16
如果您尝试的话会发生什么? - Bart Kiers
10
第一次遇到“ComputerWillExplodeException”后,你就不再尝试实验其他东西了。 - Bozho
我本可以尝试,但想确保我们能做到。现在我已经得到了答案。 - GuruKulki
2
为什么不使用另一个接口,而不是继承?在我看来,继承会混淆标记接口(声明意图)的初始目标。 - Pascal Thivent
3
尝试它只需要2分钟,但验证已经花费了6分钟。 - Bozho
4
现在您需要发布一个新问题:“类可序列化的影响是什么?”,“将类设为可序列化是什么时候不明智的?”,以及“如何设计一个可序列化的类?”请阅读Josh Bloch的《Effective Java》中有关序列化的章节。 - ddimitrov
4个回答

30

是的,你可以扩展 Serializable 接口。如果这样做了,所有实现新子接口的类也都将实现 Serializable


8

那么我们可以这样做吗?

可以。

扩展的接口会产生和Serializable接口相同的效果吗?

是的。


3

是的,这很正常。当我决定我的域中所有类都应该是可序列化的时,我曾经做过一次。它们已经实现了一些接口,所以我只需从Serializable扩展那个接口(就像你描述的那样)。


1

我将通过一个在Android中经常遇到的情况来解释这个问题。如果你想将自定义监听器(接口)的实例传递给片段,则该监听器(接口)扩展Serializable可能是一个选项。例如:

假设有一个接口:

public interface OnDurationChangeListener extends Serializable {
    public void onDurationChange(Duration duration);
}

我想从Activity中将Listener(接口)实例导出到Fragment中。

bundle.putSerializable(ARGUMENT_LISTENER, new OnDurationChangeListener() {
    @Override
    public void onDurationChange(Duration duration) {
        // some code   
    }
});

在fragment中,您可以通过以下方式获取此侦听器实例:
mListener = (OnDaysSelectListener) getArguments().getSerializable(ARGUMENT_LISTENER);

从这个片段中,我可以像这样调用活动中的回调方法:

mListener.onDaysSelect(mWeeKDayList);

5
我尝试过类似的东西,但程序崩溃了并显示我的“activity”不可序列化。 - Gonzalo
Activity的实例不能实现Serializable接口,因为它扩展了Context - Julius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接