enum in generic subclass shows as integer

I just recently discovered that using enum fields in an abstract generic class (like the good old Singleton<T>), only show up as integer fields and not as drop down menus in derived classes.

Why is that? Is it a bug?

You gave not much information about your exact case. So i went ahead and created two test cases. Since only serializable classes will show up in the inspector it should be clear that the classes either are “System.Serializable” or derived from MonoBehaviour / ScriptableObject.

First i created an abstract generic base class that was derived from MonoBehaviour. The base class has a public field of an enum type. I then created an non-abstract non-generic subclass of that base class and attached it to a gameobject. The enum shows up as dropdown as expected.

For the second test i created a serializable abstract generic class that is derived from System.Object (a normal class) with the same public enum field. Then again i created a non-generic non-abstract subclass which i exposed in a seperate MonoBehaviour class as public variable. If i inspec that MonoBehaviour i see the serializable class as expandable field. The enum of that class also shows up as drop down.

Tests has been carried out in Unity 5.5.1f1

You either have a strange setup that Unity even can’t serialize properly because the actual class used is either generic or abstract, you have a custom inspector / propertydrawer which messes up the display of the enum or you have set your inspector to debug mode. Which of those three reasons apply to you we can’t determine by the information given in the question.