This code:
class RawStringIterator {
java.util.Stack stateStack = new java.util.Stack();
RawStringIterator(RawStringIterator i) {
stateStack = (java.util.Stack) i.stateStack.clone();
}
/* ... */
}
gives me this warning:
Type safety: Unchecked cast from Object to Stack
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.clone() to return Stack 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.