Không có cách nào để loại bỏ cảnh báo unchecked or unsafe operations
hoặc tạo một mảng TypeSafe mà không chỉnh sửa chữ ký phương thức của bạn.
Xem chi tiết bug report để biết chi tiết đẫm máu.
Một cách là để vượt qua trong một mảng được cấp phát trước của Loại T
:
public class IterableHelp
{
public <T> T[] toArray(final T[] t, final Iterable<T> elements)
{
int i = 0;
for (final T element : elements)
{
t[i] = element;
}
return t;
}
}
này được thoát khỏi những cảnh báo unchecked or unsafe
, nhưng nó cũng đặt trách nhiệm vào các lớp gọi điện thoại để tạo ra các mảng với giới hạn chính xác để bắt đầu với loại đánh bại mục đích của phương pháp tiện lợi của bạn.
Nếu bạn muốn tạo động một mảng TypeSafe, bạn thực sự không thể làm điều đó theo một cách TypeSafe trong Java.
Công việc này và biên dịch, nhưng nó không giải quyết được vấn đề đúc không được kiểm soát hoặc không an toàn, nó chỉ chuyển nó đến một nơi khác. Tôi phải thêm chú thích @SuppressWarnings
để khiến chú thích ngừng phàn nàn về diễn viên.
@SuppressWarnings({"unchecked"})
public class IterableHelp
{
public <T> T[] toArray(Class<T> t, Iterable<T> elements)
{
final ArrayList<T> arrayElements = new ArrayList<T>();
for (T element : elements)
{
arrayElements.add(element);
}
final T[] ta = (T[]) Array.newInstance(t, arrayElements.size());
return arrayElements.toArray(ta);
}
}
Nguồn
2011-07-19 22:23:47
Tôi cho rằng cảnh báo nằm trên dòng cuối cùng, nơi bạn đang truyền mảng đến 'T []'? – MatrixFrog
@MatrixFrog chính xác – Dejas
Xem thêm 'Iterables.toArray của Guava (Iterable ex T>, Class)' –