覆盖克隆时处理最终字段

时间:2015-12-19 21:41:56

标签: java clone cloneable

我正在编写一个类,我必须使用臭名昭着的“super.clone()策略覆盖clone()方法”(这不是我的选择)。

我的代码如下所示:

@Override
public myInterface clone()
{
    myClass x;
    try
    {
        x = (myClass) super.clone();
        x.row = this.row;
        x.col = this.col;
        x.color = this.color; 
        //color is a final variable, here's the error
    }
    catch(Exception e)
    {
        //not doing anything but there has to be the catch block
        //because of Cloneable issues
    }
    return x;
}

一切都会好的,除了我不能在不使用构造函数的情况下初始化color,因为它是最终变量......是否有某种方法可以使用super.clone()和复制最终变量?

1 个答案:

答案 0 :(得分:1)

假设您没有其他选择,您可以使用Reflection。以下代码显示了如何分析字段颜色。 你需要一些尝试 - 围绕它。

Field f =  getClass().getDeclaredField("color");
f.setAccessible(true);
f.set(x, this.color)