unchecked or unsafe operations
चेतावनी से छुटकारा पाने का कोई तरीका नहीं है, या आपके विधि हस्ताक्षर को संपादित किए बिना टाइपसेफ ऐरे बनाना कोई तरीका नहीं है।
इस bug report को गोरी विवरण के लिए देखें।
एक तरीका प्रकार 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;
}
}
यह unchecked or unsafe
चेतावनी से छुटकारा मिलता है, लेकिन यह भी बुला वर्ग पर जिम्मेदारी डालता है के साथ सरणी बनाने के लिए अपनी सुविधा विधि के उद्देश्य से किस प्रकार की हार को हराता है, इसके साथ शुरू करने के लिए सही सीमाएं।
यदि आप गतिशील रूप से टाइपसेफ सरणी बनाना चाहते हैं, तो आप वास्तव में जावा में टाइपसेफ तरीके से ऐसा नहीं कर सकते हैं।
यह काम करता है और संकलित है, लेकिन यह अनियंत्रित या असुरक्षित डाली मुद्दे को हल नहीं करता है, यह सिर्फ एक अलग जगह पर यह बढ़ता रहता है। कलाकारों के बारे में शिकायत करना बंद करने के लिए मुझे @SuppressWarnings
एनोटेशन जोड़ना पड़ा।
@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);
}
}
स्रोत
2011-07-19 22:23:47
मुझे लगता है चेतावनी है कि अंतिम पंक्ति पर है, जहां आप 'टी []' करने के लिए सरणी कास्टिंग कर रहे हैं? – MatrixFrog
@MatrixFrog सही – Dejas
भी देखें अमरूद के 'Iterables.toArray (Iterable ex T>, कक्षा)' –