据我所知,你无法在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中新的章节列表时,我必须创建它。
我该怎么做?
提前致谢
答案 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处于最佳状态。