I read this entire thread, and I must say that what you are trying to achieve with enums is very wasteful. Chances are that the weapons list is going to grow, and some weapons are going to share types and firing patterns.
Eventually, you are going to have to code each type of firing pattern and weapon behavior in the game. Wouldn’t a better solution be to make a WeaponPattern and WeaponBehavior subset? Then a generic Weapon class that uses those 2 features can be created.
You can only have so many Weapon Behaviors and Firing Patterns. So instead of focusing on the weapon enumerations, you can instead focus on the Behaviors and Pattern. If each weapon can only have 1 firing pattern and 1 behavior, you should be able to dramatically reduce the amount of classes you need.
public class Weapon(){
private String weaponName;
private WeaponBehavior behavior;
private WeaponPattern pattern;
Weapon(String name, WeaponBehavior behavior, WeaponPattern pattern){
//Initialize weapon here
}
public void fire(){
//This weapon fires
}
}
Since your beginning goal was to not use a different class for each weapon, you can use one Weapon class to determine the firing pattern and behavior for all weapons. Enumerations will just have you write a lot of extra code regardless, and all you’ll achieve is a Weapon ID.