我想在Java中创建protected void dropdown1_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList dropdown1 = sender as DropDownList;
GridViewRow row = dropdown1.NamingContainer as GridViewRow;
// Do something with row or with row.RowIndex
}
,@Stub
或@Example
注释,以表明某些类仅用于测试。另外,我喜欢将这些类视为不推荐使用,以阻止我的库用户使用它们。我喜欢在JSR305中创建类似@Mock
和其他注释的东西。
我想出了这个:
@Nullable
用例:
import javax.annotation.meta.TypeQualifierNickname;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.*;
@Deprecated
@Retention(RetentionPolicy.RUNTIME)
@TypeQualifierNickname
@Target(value=TYPE)
public @interface Stub {
}
不幸的是,有点使用@Stub
public final class SuperAwesome implements Feature {
}
,它的接缝就像我的@TypeQualifierNickname
注释被Intellij和javac编译器标记为弃用而不是目标注释类。
有没有办法,这可以在不需要更改javac或IDE的情况下工作?
答案 0 :(得分:1)
您需要编写一些逻辑来强制执行您的编程规则,而不是使用@Stub
注释"来调用方法。您可以使用的两个框架是Checker Framework和error-prone。
缺点是您的库的用户每次编译代码时都需要运行您的工具。您需要编写说明,告诉他们如何调整构建过程以运行检查编程规则的工具。
答案 1 :(得分:0)
您需要编写自定义注释处理器作为
@Deprecated
注释适用于Stub接口,而不适用于它的使用位置。 我做了一个快速搜索,但大多数例子只是在控制台上打印东西。这可能会有所帮助
https://deors.wordpress.com/2011/10/08/annotation-processors/