我正在编写一个类,我必须使用臭名昭着的“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()和复制最终变量?
答案 0 :(得分:1)
假设您没有其他选择,您可以使用Reflection。以下代码显示了如何分析字段颜色。 你需要一些尝试 - 围绕它。
Field f = getClass().getDeclaredField("color");
f.setAccessible(true);
f.set(x, this.color)