Reputation: 55
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
Reputation: 176
What would happen if you changed:
return (I)(i).clone();
to
return ((I)i).clone();
?
Upvotes: 2
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