我们有一个类,我们需要将其传递给注释的参数,但希望在传递之前对其进行初始化
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 <- 我想传递参数,即 StandardAnalyzer(Version, stopwords),我尝试使用 new 但失败了。
以下是 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 "";
}
有没有办法在传入注解之前初始化类?
最佳答案
实际上,可以赋予注解的类型仅限于原语、字符串、类、枚举、注解和上述类型的数组。因此,例如,您不能在此处提供一组停用词。您在这里引用的是构造函数,构造函数将创建实例。但是您可以做的是将构造函数参数作为类提供:
public static class MyAnalyzer extends StandardAnalyzer {
public MyAnalyzer() { super(Version.LUCENE_32, Collections.EMPTY_SET); }
}
@Fields({ @Field(analyzer = @Analyzer(impl = MyAnalyzer.class) })
根据您的编码规则,这种方法可能存在内部类与方法混合的问题。因此,也许您在某个地方收集此类类(class)可能会感觉更好。另一个缺点是这些类需要公开才能真正拥有一个公共(public)构造函数。
关于java - 如何在 Java 注释中初始化一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43467976/