की कोशिश करनी चाहिए सरणी प्रकार अज्ञात है, तो आप बस Object[]
पर कास्ट नहीं कर सकते हैं, और इसलिए java.util.Arrays
में विधियों (equals
, deepEquals
) का उपयोग नहीं कर सकते हैं।
हालांकि आप सरणी की लंबाई और वस्तुओं को प्राप्त करने के लिए प्रतिबिंब का उपयोग कर सकते हैं, और उन्हें तुलनात्मक रूप से तुलना कर सकते हैं (आइटम स्वयं सरणी हो सकते हैं)।
यहाँ एक सामान्य उपयोगिता जो एक की अनुमति देता है या यहां तक कि दोनों होने के लिए अशक्त दो वस्तुओं (सरणियों भी समर्थित हैं) की तुलना करने के विधि, है:
public static boolean equals (Object a, Object b) {
if (a == b) {
return true;
}
if (a == null || b == null) {
return false;
}
if (a.getClass().isArray() && b.getClass().isArray()) {
int length = Array.getLength(a);
if (length > 0 && !a.getClass().getComponentType().equals(b.getClass().getComponentType())) {
return false;
}
if (Array.getLength(b) != length) {
return false;
}
for (int i = 0; i < length; i++) {
if (!equals(Array.get(a, i), Array.get(b, i))) {
return false;
}
}
return true;
}
return a.equals(b);
}
स्रोत
2014-11-11 15:28:22
जोड़ा कुछ विधि घोषणा भागों (public static ...) - अन्यथा यह मुझे पास ब्लॉक के साथ रूबी विधि कॉल के रूप में देखा :-) – Vladimir