public void addProductList(ArrayList<ViewOrderProduct> globalOrderProductList) {

    this.productOrderList =  (ArrayList<ViewOrderProduct>)globalOrderProductList.clone();
}

This gives me the warning:

Type safety: Unchecked cast from Object to ArrayList

I know that I can simply solve the problem adding @SuppressWarnings("unchecked").

But I want understand the problem. I can be sure that all goes good if I add the suppressWarnings? Is there another solution for this warning?

有帮助吗?

解决方案

clone() returns Object by default, the correct way to clone an ArrayList is to use the appropriate constructor:

this.productOrderList =  new ArrayList<ViewOrderProduct>(globalOrderProductList);

Edit: The preferred way is to use the appropriate constructor, and both methods only return a shallow copy anyways.

Edit: And there's no other way I'm aware of, to remove the warning using clone() without a SuppressWarning.

其他提示

arraylist is wrapper over Object[], anything inside stored as Object, it does not matter what constructor is used result will be same.

as stated above, to evoid warning you shoud use constructor public ArrayList(Collection c) {}

eg new ArrayList(globalOrderProductList);

this will return copy of content without warnings.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top