动态名称变量java(解析器创建结构)

时间:2012-09-06 20:23:03

标签: java class variables dynamic linked-list

据我所知,你无法在Java中使用动态名称创建变量,因此我将解释问题,看看是否有替代方案。我的问题是我必须解析一个包含英语法律的长文本,它具有层次结构:

它以这种方式分开:

图书

----章节

--------文章 OR

图书

----标题

--------章节

-------------文章 OR

图书

----标题

--------章节

-------------节

-----------------文章

正如你所知道的那样,结构必须有所不同。信息必须来自这样的文件:

第1册:第一册的名称 标题1:标题1的名称 第1章:第1章的名称 第1条:第1条的名称 第2条:第2条的名称 第2章:第2章的名称 第1节:第1节的名称 第3条:第3条的名称 标题2:...... 第1章: ... ... 第二册:...... .... 第3册


所以你明白了,文本可能随机包含分类,它不像第一章所有章节,然后是所有文章等等。

为此提出的实施是:

 public class Book {
   private int id;
   private List<Chapter> chapters;
   private List<Title> titles;

   // getters/setters/constructor
}

public class Chapter {
   private int id;
   private List<Section> section;
   private List<Article> articles;

   // getters/setters/constructor
}

public class Title {
   private int id;
   private List<Chapter> chapters;

   // getters/setters/constructor
}

public class Section {
   private int id;
   private List<Article> articles;

   // getters/setters/constructor
}

问题是列表必须以动态方式创建。这是当解析器说我需要在书号n中新的章节列表时,我必须创建它。

我该怎么做?

提前致谢

1 个答案:

答案 0 :(得分:3)

最简单的解决方案是让它们都实现Element接口,然后让接口包含对其他Element个对象的引用:

public interface Element {
    List<Element> getSubElements();
}

然后预订:

public class Book implements Element {
    // Your other stuff
    private List<Element> subElements;

    public void getSubElements() {
        return subElements;
    }
}

Polymorphism处于最佳状态。