我想使用自己的自定义注释创建一个api,隐藏代码应该被触发。 我创建了我的注释并创建了处理器。 但现在的问题是,我不知道如何构建它。 让我以更好的方式解释: 它是一个控制台应用程序,我必须在调用方法后打印文本。
因此,我创建了一个注释class GridViewCellTemplateSelector : DataTemplateSelector
{
private readonly string _columnName;
public GridViewCellTemplateSelector(string columnName)
{
_columnName = columnName;
}
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
var entry = (Entry)item;
var dataTemplate = new DataTemplate {
DataType = typeof (Entry)
};
var stackPanelFactory = new FrameworkElementFactory(typeof(StackPanel));
stackPanelFactory.SetValue(StackPanel.OrientationProperty, Orientation.Vertical);
var text = new FrameworkElementFactory(typeof(TextBlock));
text.SetBinding(TextBlock.TextProperty, new Binding($"EntryKeyValuePairs[{entry.EntryKeyValuePairs.FindIndex(p => p.Key == _columnName)}].Value"));
stackPanelFactory.AppendChild(text);
dataTemplate.VisualTree = stackPanelFactory;
return dataTemplate;
}
}
,并创建了一个PrintTextProcessor。
但是当我尝试编译它时,它没有显示所需的输出。
我正在诠释一种方法。
但它看起来注释不起作用。
我错过了什么。
以下是我的代码 注释类:
CellTemplateSelector = new GridViewCellTemplateSelector(column.Name)
注释处理器类:
@PrintText
现在我的主要课程来了:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface PrintText{
}
现在,当我尝试编译并运行它时,它只打印以下文本: 在测试方法
我使用了以下命令
@SupportedAnnotationTypes("com.example.PrintText")
public class PrintTextProcessor extends AbstractProcessor {
@Override
public boolean process(Set<? extends TypeElement> annotations,
RoundEnvironment roundEnv) {
Set<? extends Element> elements = roundEnv.getElementsAnnotatedWith(PrintText.class);
for(Element e : elements){
if(!e.getClass().equals(ParticularType.class)){
processingEnv.getMessager().printMessage(Kind.ERROR,
"@PrintText annotated fields must be of type ParticularType");
}
}
return true;
}
}
public class Main{
@PrintMe
public void testMethod(){
System.out.println("In test method");
}
public static void main(String s[]){
new Main().testMethod();
}
}
我错过了什么吗? 我在互联网上经历了几个帖子,发现有适当的工具。 但我不知道如何通过命令行构建和运行它。 我正在使用java6。
提前致谢。
答案 0 :(得分:1)
这是一个很好的例子https://github.com/provegard/aptdemo 但基本上你必须创建包META-INF / services 并将带有类路径的javax.annotation.processing.Processor文件放入您的处理器(换句话说,注册您的处理器),然后构建您的应用程序,让我们用mvn来获取jar文件(mvn包,参见示例)然后编译与javac(javac -cp /path/to/aptdemo-1.0-SNAPSHOT.jar SomeTestClass.java)