Java is a strongly statically typed language, so it is no good practise to do something like this.
Of course you can use HashMaps all over the place, like:
Map playerSkills = new HashMap<String, Integer>();
...
playerSkille.set("fireBall", 3);
Or pass only Object.class objects around with a lot of instanceOf , but than what is the point to use Java. If you like to code like this perhaps give javascript(browser games) or phyton a try.
When you code in Java you always have to think about types. So you have an item which can be applied to what?
Only the player or also humans, monsters, a table??
When you have this figured out, you normally build up an inheritance tree.
Thing: has a position
Table is a Thing
LivingThing is a Thing, but also has healt
Monster is a LivingThing, has loot
Zombie is a Monster
Human is a LivingThing, has a name
Player is a Human, has items
And in the and you do something like this
class HealthPotion extends Item
{
void applyTo(LivingThing someon);
}