【问题标题】:Java clone only superclassJava 仅克隆超类
【发布时间】:2016-03-02 16:15:29
【问题描述】:

我有这样一个问题:是否有可能如何将超类从一个对象“提取”到新对象?我会表明我的意思。

public class test {

public static void main(String[] args) {
    subclass sb = new subclass(false);
    System.out.println(sb.a);
    System.out.println(sb.b);
    superclass sc = sb;
    superclass sc2;
    try {

        sc2 = sc.clone();
    } catch (CloneNotSupportedException e) {
        e.printStackTrace();
        return;
    }
    System.out.println(((subclass)sc2).a);
}

private static class superclass implements Serializable, Cloneable {
    public boolean b;
    public superclass() {
        b = false;
    }
    public superclass(boolean a) {
        this.b = a;
    }
    public superclass clone() throws CloneNotSupportedException {
        return (superclass)super.clone();
    }
}

private static class subclass extends superclass implements Serializable{
    public boolean a;
    public subclass(boolean a) {
        super(true);
        this.a = a;
    }
}
}

通过这段代码,我得到了这个输出:

false
true
false

这意味着该对象被完全克隆,但我只想克隆超类。

是否有任何已经实现的方法可以做到这一点,或者我必须在超类中实现自己的字段到字段复制方法?

【问题讨论】:

  • 为什么要部分克隆一个对象?这将违反clone() 的合同。如果您只想复制对象的一部分,我强烈建议您考虑使用工厂方法或复制构造函数。

标签: java serialization cloning


【解决方案1】:

不确定您真正想通过示例实现/证明什么。即使可以只克隆超类,结果仍将保持不变,因为它只是复制 a 字段。

无论如何,答案是否定的。克隆是按目的的方法,因此您无需关心后台的真实类。如果您希望对特定的超类进行部分克隆,您可以通过调用特定的构造函数/设置器轻松实现这一点,因为您在编译时拥有所有信息。

【讨论】:

    猜你喜欢
    • 2015-06-16
    • 2015-05-01
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    • 2011-11-14
    相关资源
    最近更新 更多