【问题标题】:Can an interface extend the Serializable interface?接口可以扩展 Serializable 接口吗?
【发布时间】:2010-02-16 13:50:22
【问题描述】:

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

如果是,该扩展接口的行为是否类似于 Serilizable 接口?如果不是,为什么?

【问题讨论】:

  • 如果你尝试会发生什么?
  • 在你第一次收到ComputerWillExplodeException 之后,你就停止了尝试。
  • 你为什么不直接使用另一个接口,没有继承?继承会混淆标记接口的初始目标(声明意图)IMO。
  • 试了2分钟,验证已经6分钟了。
  • 现在您需要发布一个新问题“类可序列化的含义是什么”、“什么时候将类设为可序列化是个坏主意”和“如何设计可序列化的类” .阅读 Josh Bloch 的 Effective Java 中关于序列化的章节。

标签: java serialization


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    那么我们可以这样做吗?

    是的

    该扩展接口将采用 与 Serilizable 相同的效果 界面?

    是的

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        我用 android 中经常遇到的情况来解释这一点。如果您想将自定义侦听器(接口)的实例传递给片段,那么侦听器(接口)扩展 Serializable 可以是您的选择。例如

        假设有一个接口:
        public interface OnDurationChangeListener extends Serializable {
            public void onDurationChange(Duration duration);
        }
        

        从我想将实例监听器(接口)导出到片段的活动。

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

        在片段中,您可以将此侦听器实例获取为:

        mListener = (OnDaysSelectListener) getArguments().getSerializable(ARGUMENT_LISTENER);
        

        从片段中我可以将活动中的回调方法调用为

        mListener.onDaysSelect(mWeeKDayList);
        

        【讨论】:

        • 我尝试过类似的操作,但它说我的 activity 不是 serializable 时崩溃了。
        • Activity 的实例无法实现Serializable 接口,因为它扩展了Context。
        猜你喜欢
        • 2016-09-17
        • 2013-11-02
        • 2018-12-01
        • 2011-02-15
        • 1970-01-01
        • 2020-11-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多