Sobes.tech
Junior — Middle

შესაძლებელია ობიექტში გასაღებად არასტრინგული მნიშვნელობის გამოყენება?

sobes.tech AI

პასუხი AI-სგან

Java-ში (და, განსაკუთრებით, Android-ში) სტანდარტული ობიექტებში, როგორიცაა HashMap, გასაღები შეიძლება იყოს ნებისმიერი კლასი, არა აუცილებელი სტრიქონი. მთავარი ის არის, რომ ეს ობიექტი სწორად განახორციელოს equals() და hashCode() მეთოდები. მაგალითად, შეიძლება გამოიყენოთ Integer, Enum ან საკუთარი კლასი გასაღებად.

მაგალითი:

Map<Integer, String> map = new HashMap<>();
map.put(1, "ერთი");
map.put(2, "ორი");

String value = map.get(1); // "ერთი"

თუმცა, თუ ჩვეულებრივ ობიექტს გამოიყენებთ equals და hashCode-ის გადაწერას გარეშე, ქცევა შეიძლება იყოს გაურკვეველი, რადგან გასაღებები ამ მეთოდების მიხედვით შედარებულია. განსხვავებით JavaScript-ისგან, სადაც ობიექტის გასაღებები ყოველთვის კონვერტირდება სტრიქონად, Java-ში Map-ის გასაღებები შეიძლება იყოს ნებისმიერი ობიექტი.