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();
}
}
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.