代码之家  ›  专栏  ›  技术社区  ›  Milhous

Java可扩展枚举

  •  7
  • Milhous  · 技术社区  · 17 年前

    public enum ORDERFIELDS
            {
                OrderID("Order_ID");
                private String FieldName;
    
                private ORDERFIELDS(String fname)
                    {
                        this.FieldName = fname;
                    }
    
                public String getFieldName()
                    {
                        return FieldName;
                    }
            } 
    
    6 回复  |  直到 14 年前
        1
  •  16
  •   Guido    9 年前

    所有枚举都隐式扩展 java.lang.Enum . 由于Java不支持多重继承,枚举不能扩展任何其他内容。

        2
  •  10
  •   Community Mohan Dere    9 年前

    如果我理解正确,你想做的是这样的:

    public abstract class DatabaseField {
        private String fieldName;
    
        private DatabaseField(String fieldName) {
            this.fieldName = fieldName;
        }
    
        public String getFieldName() {
            return fieldName;
        }
    }
    

    然后定义枚举以扩展此类。然而,不幸的是,枚举不能扩展类,但它可以实现一个接口,因此目前最好定义一个包含getFieldName()方法的接口,并让所有枚举实现该接口。

    但是,这意味着您必须在所有枚举中复制此方法(以及任何其他方法)的实现。在本文中有一些建议 this question 关于尽量减少重复的方法。

        3
  •  6
  •   Guðmundur Bjarni    17 年前

    枚举可以实现接口,但不能扩展,因为在编译时,它们转换为java.lang.Enum。

        4
  •  6
  •   Alex Miller    17 年前

    抽象枚举可能非常有用(目前不允许)。但是,如果您想在Sun中游说某人添加建议和原型,则存在建议和原型:

    http://freddy33.blogspot.com/2007/11/abstract-enum-ricky-carlson-way.html

    Sun RFE:

    http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6570766

        5
  •  0
  •       17 年前

    Item 21, Chapter 5,Effective Java by Josh Bloch . 他谈到通过添加值来扩展“enum”,但也许您可以使用一些技术来添加一个新方法?

        6
  •  0
  •   Aidos    17 年前

    在类似于Josh Bloch的高效Java中定义的机制中手工制作枚举。