我有一个以下Java代码,其中枚举数据类型用于创建基类的实例,如下所示:
主要摘要类:

public abstract class Element{
    static enum elements{
         quad8{Element create(){return new ElementQuad2D();}};
         abstract Element create();
    }
    public static Element newElement (String name){
         el=elements.valueOf(name);
         return el.create();
    }
    public Element (String name, int nind, int nstress){
        this.name = name;
        /*Do Something Else*/
    }
}


子类:

class ElementQuad2D extends Element{
    public ElementQuad2D(){
    super("quad8",8,4);
    }
}


如何创建上述枚举类型,以便我可以根据元素名称(如PYTHON中的“ quad8”)创建不同子类的实例?

最佳答案

这可以通过从字符串到类的字典轻松实现。子类的使用在这里不起作用:

class Element: pass

class ElementQuad2D(Element): pass

mapping = {'quad8': ElementQuad2D}
obj = mapping['quad8']()
print(obj)
#  <__main__.ElementQuad2D object at 0x01D70BD0>

10-08 19:15