用户定义的枚举与抽象方法反编译为抽象类不能被任何其他类扩展

时间:2017-02-10 07:21:25

标签: java inheritance enums abstract decompiling

我正在尝试学习Enum,当我开始知道枚举被反编译时它们是最终隐式的,所以不能被任何其他类扩展,但是当添加任何抽象方法时,它要求实现该方法并将其反编译为抽象class所以我的问题是,在这种情况下,它必须允许这个用户定义的枚举被任何其他常规类扩展。

下面是我在研究目的上所做的代码。

  1. Vehicle.java

    public class BackgroundConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            ListViewItem item = value as ListViewItem;
            if (item == null) return Brushes.White;
            ListView listView = ItemsControl.ItemsControlFromItemContainer(item) as ListView;
            // Get the index of a ListViewItem
            if (listView == null)
                return Brushes.White;
            int index = listView.ItemContainerGenerator.IndexFromContainer(item);
            if (index % 2 == 0)
            {
                return Brushes.WhiteSmoke;
            }
            return Brushes.White;
        }
    
    
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotSupportedException();
        }
    }
    
  2. 反编译为:

     public enum Vehicle
     {
     car("car"), Bike;
    
     private String value;
    
     Vehicle(String value) {
     this.value = value;
     }
    
     Vehicle() {
    
     }
    
     public String getValue() {
     return value;
     }
    
     public void setValue(String value) {
     this.value = value;
     }
     }
    
    1. City.java

        public final class Vehicle extends java.lang.Enum<Vehicle> {
        public static final Vehicle car;
        public static final Vehicle Bike;
        public static Vehicle[] values();
        public static Vehicle valueOf(java.lang.String);
        public java.lang.String getValue();
        public void setValue(java.lang.String);
        static {};
        }
      
    2. 反编译为:

        public enum City {
        Nagpur("np") {
         @Override
         void show() {
          // TODO Auto-generated method stub
         }
       };
      
       abstract void show();
      
       private String value;
      
       City(String value) {
        this.value = value;
       }
      
       City() {
      
       }
      
       public String getValue() {
        return value;
       }
      
       public void setValue(String value) {
        this.value = value;
       }
      }
      

      我尝试使用常规类重新创建场景,这样做很好。下面是代码。

      1. Enum.java

             public abstract class City extends java.lang.Enum<City> {
             public static final City Nagpur;
             public static City[] values();
             public static City valueOf(java.lang.String);
             abstract void show();
             public java.lang.String getValue();
             public void setValue(java.lang.String);
             City(java.lang.String, int, java.lang.String, City$1);
             static {};
             }
        
      2. 2.Vehicle.java

         public abstract class Enum<T extends Enum<T>> {
        
         }
        

        3.Car.java

             public abstract class Vehicle extends Enum<Vehicle> {
             private String name;
        
             Vehicle vehicle=new Vehicle() {
        
             @Override
             public void show() {
            // TODO Auto-generated method stub
        
             }
            };
            public String getName() {
            return name;
            }
        
            public void setName(String name) {
            this.name = name;
            }
        
            public abstract void show();
            }
        

        很抱歉长代码和错误的缩进但是我很困惑为什么即使在反编译为抽象类之后用户定义的枚举也无法扩展。 提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我们无法扩展这些枚举,因为它们的构造函数是私有的。