This code:
class RawStringIterator {
java.util.Stack<State> stateStack = new java.util.Stack<State>();
RawStringIterator(RawStringIterator i) {
stateStack = (java.util.Stack<State>) i.stateStack.clone();
}
/* ... */
}
gives me this warning:
Type safety: Unchecked cast from Object to Stack<Utils.OperatorTree.RawStringIterator.State>
I guess I can ignore the warning here. But I wonder about how to use clone()
in general? Do I always have to use a @SuppressWarnings("unchecked")
every time I use clone()
? Or should I always do the completely redundant extra check?
If you have the choice, the best is not to implement / use clone()
at all, because it is a broken API. Just implement / use a copy constructor instead.
If for some pressing reason you must use clone()
but can change its implementation, consider declaring Stack<T>.clone()
to return Stack<T>
instead of Object
- covariant return types are legal since Java5.
Update: if the Stack
in question is java.util.Stack
, consider its Javadoc:
A more complete and consistent set of LIFO stack operations is provided by the
Deque
interface and its implementations, which should be used in preference to this class.
And e.g. ArrayDeque
provides a copy constructor.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With