I have the following method that can return different types of Storable (ex: Food, Ore).
Inventory.java
public Storable get(Class<? extends Storable> cls) {
for (Storable storable : inventory) {
if(cls.isInstance(storable)) {
this.inventory.remove(storable);
return storable;
}
}
return null;
}
It works, however I'm forced to cast my result like below:
Food food = (Food) inventory.get(Food.class);
With Java 15 and above, we can define casted object directly with instanceof
(link to javadoc). I'm wondering if I can use this new syntax and return casted object directly.
I tried this but instanceof
keyword only works with type not variable:
public Storable get(Class<? extends Storable> cls) {
for (Storable storable : inventory) {
if(storable instanceof cls castedItem) { //cls cannot be resolved to a type
this.inventory.remove(storable);
return castedItem;
}
}
return null;
}