Alb*_*ert 4 java clone compiler-warnings
这段代码:
class RawStringIterator {
java.util.Stack<State> stateStack = new java.util.Stack<State>();
RawStringIterator(RawStringIterator i) {
stateStack = (java.util.Stack<State>) i.stateStack.clone();
}
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
给了我这个警告:
Type safety: Unchecked cast from Object to Stack<Utils.OperatorTree.RawStringIterator.State>
Run Code Online (Sandbox Code Playgroud)
我想我可以忽略这里的警告.但我想知道如何使用clone()一般?@SuppressWarnings("unchecked")每次使用时我总是要使用clone()吗?或者我应该总是进行完全冗余的额外检查吗?
Pét*_*rök 12
如果你有选择,最好不要实现/使用clone(),因为它是一个破坏的API.只需实现/使用复制构造函数.
如果由于某些紧迫的原因你必须使用clone()但可以改变它的实现,考虑声明Stack<T>.clone()返回Stack<T>而不是Object- 协变返回类型是合法的,因为Java5.
更新:如果Stack问题是java.util.Stack,请考虑其Javadoc:
Deque接口及其实现提供了更完整和一致的LIFO堆栈操作集,应该优先使用该类.
并且例如ArrayDeque提供了复制构造函数.