使用java中其他类的对象调用类的方法

时间:2011-06-16 07:50:48

标签: java

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 中定义的方法。

1 个答案:

答案 0 :(得分:2)

clone()Object上受到保护,正是因为这个原因 - 你不能只是在任意对象上调用它。这是一个hack,所以所有类都可以继承该方法的实现,但默认情况下不公开该行为。 (有关详细信息,请参阅Why is the clone method protected in java.lang.Object?。)

无论如何,如果你真的希望你的Statement类的实例可以克隆,你应该做两件事:

  1. 确保课程实施Cloneable
  2. 将clone方法重新定义为public,并且只需遵循超类实现。 (这也使您有机会使用协变返回类型来防止调用者在大多数情况下必须进行投射)。
  3. 后者实际上使克隆方法可见,并且看起来如下:

    @Override
    public Statement clone() {
        return (Statement)super.clone();
    }