I have a method that accepts an Object. In one use case, the method accepts a HashMap<String, String>
and sets each value to the property of the corresponding key name.
public void addHelper(Object object) {
if (object instanceof HashMap) {
HashMap<String, String> hashMap = (HashMap<String, String>) object;
this.foo = hashMap.get("foo");
this.bar = hashMap.get("bar");
}
}
This class adheres to a particular interface, so adding setters for those properties is not an option.
My question is, how can I check the type cast here?
HashMap<String, String> hashMap = (HashMap<String, String>) object;
Thanks in advance!
SOLUTION
Thanks to the answer from @drobert, here is my updated code:
public void addHelper(Object object) {
if (object instanceof Map) {
Map map = (Map) object;
if (map.containsKey("foo")) this.foo = map.get("foo").toString();
if (map.containsKey("bar")) this.bar = map.get("bar").toString();
}
}
HashMap containsKey() Method in Java containsKey() method is used to check whether a particular key is being mapped into the HashMap or not. It takes the key element as a parameter and returns True if that element is mapped in the map.
Yep Sure.. please find the edited answer.. The example is only all about how to add,search, retrieve values in HashMap.
You can't. Due to type erasure, reflection will show you have an instance of HashMap, but the types are dropped at runtime. Effectively, you have HashMap< Object,Object >.
That said, you still have some options, and some advice I'd suggest you take. Among them:
In short: treat this like any Map, and attempt to access the keys as Strings even without the cast, and attempt to utilize each value as a String by doing a null check then calling .toString() and you'll have a much safer implementation.
It should be noted that the original routine is exactly equivalent to coding
public void addHelper(Object object) {
if (object instanceof HashMap) {
HashMap hashMap = (HashMap) object;
this.foo = (String)(hashMap.get("foo"));
this.bar = (String)(hashMap.get("bar"));
}
}
The explicit (HashMap)
cast cannot possibly throw an error, since it's guarded by the instanceof
. The implicitly-supplied (String)
casts will only throw an error if the values returned from the HashMap are not Strings (or nulls).
(By "exactly equivalent to" I mean that the same bytecode is produced.)
You should use try-catch, where you call addHelper(Object)
method. This will ensure your correct type of HashMap
.
try{
addHelper(hashMap);
}
catch(ClassCastException ex){
System.out.println("Is not desired hashmap");
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With