获取内部类静态成员的方法

最近需要些一个可配置的索引构建程序,需要在运行时调用Lucene包的如下类及其成员:

  引用

  Nested Class Summary

  static class Field.Index

  Specifies whether and how a field should be indexed.

  static class Field.Store

  Specifies whether and how a field should be stored.

  static class Field.TermVector

  Specifies whether and how a field should have term vectors.

  lucene api中称之为Nested Class,意为嵌套类,而嵌套类内部的File.Index的成员又是静态成员。

  引用

  Field Summary

  static Field.Index ANALYZED

  Index the tokens produced by running the field's value through an Analyzer.

  static Field.Index ANALYZED_NO_NORMS

  Expert: Index the tokens produced by running the field's value through an Analyzer, and also separately disable the storing of norms.

  static Field.Index NO

  Do not index the field value.

  static Field.Index NO_NORMS

  Deprecated. This has been renamed to NOT_ANALYZED_NO_NORMS

  static Field.Index NOT_ANALYZED

  Index the field's value without using an Analyzer, so it can be searched.

  static Field.Index NOT_ANALYZED_NO_NORMS

  Expert: Index the field's value without an Analyzer, and also disable the storing of norms.

  static Field.Index TOKENIZED

  Deprecated. this has been renamed to ANALYZED

  static Field.Index UN_TOKENIZED

  Deprecated. This has been renamed to NOT_ANALYZED

  一个棘手的问题,如果获得这些内部静态成员?

  最后采用了如下方法:

  //运行时调用Filed.Index类型

  Java代码

  Class<?> cls = org.apache.lucene.document.Field.Index.class;

  java.lang.reflect.Field indexDeclareField = cls.getDeclaredField(field.getIndex());

  Object indexDeclareFieldType = indexDeclareField.get(cls);

  org.apache.lucene.document.Field.Index filedIndex = (org.apache.lucene.document.Field.Index)indexDeclareFieldType;

  //运行时调用Field.Store类型

  Class<?> clsStore = org.apache.lucene.document.Field.Index.class;

  java.lang.reflect.Field storeDeclareField = cls.getDeclaredField(field.getIndex());

  Object indexStoreDeclareField = indexDeclareField.get(cls);

  org.apache.lucene.document.Field.Store filedStore = (org.apache.lucene.document.Field.Store)indexStoreDeclareField;

添加新评论