【问题标题】:Inheritance of private inner class私有内部类的继承
【发布时间】:2018-05-19 12:36:42
【问题描述】:

我想在一个类中实现 Serializable,但我不允许修改它。我的想法是创建另一个从另一个类继承的类。但是原来的类是这样构建的:

public class ClassName {

    private class InnerClass{
        private InnerClass(){
            //do stuff
        }
    }

    public ClassName(){
        //do stuff
    }
}

所以跟随不起作用,因为InnerClass 是私有的,因此不可见:

import java.io.Serializable;

public class ClassTwo extends ClassName implements Serializable{

    private class InnerClass extends ClassName.InnerClass implements Serializable {
        private InnerClass(){
            super();
        }
    }

    public ClassTwo(){
        super();
    }
}

有没有办法在不改变原始类的情况下将 Serializable 实现为ClassName

【问题讨论】:

  • 如果您对要序列化的所有插槽具有读/写访问权限,则可以创建一个包含ClassName 的适配器类。如果您没有读/写访问权限,那么子类化无论如何都不会起作用。
  • Slivio 基本上是正确的,我认为。如果您可以访问 InnerClass 中的 getter 和 setter 来重建类的实例,那么您可以使用某种包装器来完成。如果没有,那就有反思。两者都不是完全推荐的。 private 表示您不应该能够直接继承或访问。
  • @Silvio 我认为您应该写下该评论作为答案。没有人会在 cmets 中看到它!

标签: java class inheritance private


【解决方案1】:

如果您对要序列化的所有插槽具有读/写权限,则可以创建一个适配器类。

public class MyClassAdapter implements Serializable {
    private MyClass instance;
    ...
}

然后在序列化前将实例包装在这个适配器类中,反序列化后提取。

如果您没有对插槽的读/写访问权限,这可能是有充分理由的,并且序列化您不拥有的数据是一个坏主意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多