Eyal
Eyal

Reputation: 55

cloning interfaces in Java

I have a problem in Java:

I have an interface:

public interface I extends Cloneable {

}

and an abstract class:

public abstract class AbstractClass {

    private I i;

    public I i() {
        return (I)(i).clone();
    }
}

but the usage of clone() yields the following error:

The method clone() is undefined for the type I

does anybody have any Idea how to get around this issue? the only fix I found is to add to I a new method: (I newI() ) that will clone I. is there a cleaner solution?

thanks.

Upvotes: 3

Views: 5314

Answers (2)

Stuart
Stuart

Reputation: 176

What would happen if you changed:

return (I)(i).clone();

to

return ((I)i).clone();

?

Upvotes: 2

oxbow_lakes
oxbow_lakes

Reputation: 134270

You need to override the clone() method to be public

public interface MyI extends Cloneable {
    public MyI clone();
}

Rather bizarrely, Cloneable does not actually contain the clone() method and clone() is protected on Object! It's been discussed before on SO

Upvotes: 7

Related Questions