List CreateNewStatements(ForLoop L)
{
List stmts = new ArrayList();
FlatIterator iter = new FlatIterator(L.getBody());
Traversable t1 = null;
LoopUnroll l = new LoopUnroll(t1);
while(iter.hasNext())
{
stmts.add(iter.next().clone());
}
return stmts;
}
上面的代码给出错误为“类型对象中的方法clone()不可见”。
在上面的代码中,iter.next()返回一个类型为 Object 的语句(例如fx [i] = fx [i] + x)(内置到java库中),使用它我想调用方法clone()。上面的代码是在类 LoopUnroll 中编写的,clone()是在类 Statement 中定义的方法。
答案 0 :(得分:2)
clone()
在Object
上受到保护,正是因为这个原因 - 你不能只是在任意对象上调用它。这是一个hack,所以所有类都可以继承该方法的实现,但默认情况下不公开该行为。 (有关详细信息,请参阅Why is the clone method protected in java.lang.Object?。)
无论如何,如果你真的希望你的Statement
类的实例可以克隆,你应该做两件事:
Cloneable
后者实际上使克隆方法可见,并且看起来如下:
@Override
public Statement clone() {
return (Statement)super.clone();
}