我们需要将一个类传递给注释参数,但希望在传递
之前对其进行初始化public final class StandardAnalyzer extends StopwordAnalyzerBase {
public static final int DEFAULT_MAX_TOKEN_LENGTH = 255;
private int maxTokenLength;
private final boolean replaceInvalidAcronym;
public static final Set<?> STOP_WORDS_SET;
public StandardAnalyzer(Version matchVersion, Set<?> stopWords) {
}
以下是注释:
@Fields({ @Field(index = Index.YES, store = Store.NO, analyzer = @Analyzer(impl = StandardAnalyzer.class)
在@Analyzer中(impl = StandardAnalyzer&lt; - 我想传递参数,即StandardAnalyzer(版本,停用词),我尝试使用新的但失败了。
以下是Analyzer的注释详细信息:
@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = {ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
@Documented
public @interface Analyzer {
public Class<?> impl() default void.class; <--- Here is where i want to pass
public String definition() default "";
}
在传入注释之前有没有办法初始化类?
答案 0 :(得分:1)
实际上,可以赋予注释的类型仅限于基元,字符串,类,枚举,注释和前面类型的数组。因此,例如,您无法在此提供一组停用词。你在这里引用的是构造函数,构造函数将创建实例。但你可以做的是提供构造函数参数作为类:
public static class MyAnalyzer extends StandardAnalyzer {
public MyAnalyzer() { super(Version.LUCENE_32, Collections.EMPTY_SET); }
}
@Fields({ @Field(analyzer = @Analyzer(impl = MyAnalyzer.class) })
根据您的编码规则,这种方法可能存在问题,即内部类与方法混合在一起。所以也许你可能会在某处收集这类课程感觉更好。另一个缺点是类需要public才能实际拥有公共构造函数。