I'm creating a game with hundreds of abilities, so trying to leverage abstracts and generics as much as possible.
Each ability extends an abstract Ability class with universal methods like getCooldown(player), which gets a specific ability's cooldown for a player. Inheritance saves me from having to duplicate that code in every ability class.
public abstract class Ability {
public static String getCooldown() {
    int cooldown;
    //logic to get cooldown in milliseconds
    return cooldown;
    }
}
But the logic and metadata for each ability are unique and coded like such:
public class Parry extends Ability {
    public static String getDescription() {
        ...
    }
    public static void castAbility() {
        ...
    }
}
Here's my enum. I'm using an enum because abilities and their metadata are constants that are ideally available at compile time. I also don't want to store the metadata separate from the classes which have the rest of the ability logic.
public enum AbilityEnum {
    BORN_READY(BornReady.class),
    JUGGLER(Juggler.class),
    ...
    PARRY(Parry.class);
    public final Class<? extends Ability> cls;
    AbilityEnum(Class<? extends Ability> cls) {
        this.cls = cls;
    }
}
In other parts of the codebase, I want to use the Enum to generically get basic info on an ability, cast a spell, etc. I want to avoid hard-coding for any specific ability because there are 200+ of them. For example, when a player opens their skill menu, I need to grab the descriptions for every ability. I'd rather not type [ability_name].getDescription() 200+ times.
for (AbilityEnum ability : AbilityEnum.values()) {
        String tooltip = ability.cls.getDescription();
        ...
        // load descriptions into menu system so players
        // can hover abilities for a tooltip description
    }
If I try to run this I get the error:
Cannot resolve method 'getDescription' in 'Class'
This confuses me because I bounded the generic, so why does it think it has a Class instead of an Ability? I think I'm either misusing generics or have the wrong syntax for calling methods this way. Perhaps I should be using a list or something else instead of an enum?