创建构造函数的Java注释

创建构造函数的Java注释,java,annotations,retention,Java,Annotations,Retention,我正在为我的自动化框架使用PageFactorypage对象模型。现在我必须为每个页面类创建一个构造函数。例如: public class StudentProfile { public StudentProfile (WebDriver driver) { this.driver = driver; PageFactory.initElements(driver, this); } } 但是我想创建一个自定义注释。这样我就不必为每个页面类重复

我正在为我的自动化框架使用
PageFactory
page对象模型。现在我必须为每个页面类创建一个构造函数。例如:

public class StudentProfile {

    public StudentProfile (WebDriver driver) {
        this.driver = driver;
        PageFactory.initElements(driver, this);
    }
}
但是我想创建一个自定义注释。这样我就不必为每个页面类重复一遍又一遍

@InitElements(driver)
public class StudentProfile {
    
        // to do 
    }

@InitElements(driver)
public class SchoolHomePage {
    
        // to do 
    }
我已经通过了以下的TUT,但不明白我将如何实现它


    • 你基本上不能。注释API仅提供两种基本体:

      • 让注释可以在运行时检查。如果您想编写一个工具,例如,获取某个类的实例,并使用该类字段上编写的注释作为将该实例序列化为XML或JSON blob的指导,那么这是非常好的。它对这个用例完全不起作用;您不能只在运行时将构造函数添加到对象中并使其有用(因此,构造函数在编译时不存在,而编译时显然是您需要它们的时候)

      • 在编译过程中插入注释处理器,它就可以看到它们。但是,开箱即用的API,注释处理器可以生成新文件;它不能修改现有的。因此,它也不能添加该构造函数

      还有第三个选项:它使用注释,可以动态地在现有文件中生成代码。但这是火箭科学——我们(我是核心贡献者之一)为各种编译器编写自定义代码,并进行一些几乎不受支持的恶作剧,同时进行大量维护工作,以确保一切正常工作

      这听起来像是一个很好的自定义任务,只为您的项目,没有其他龙目舞除了我们没有意义上的支持。当然,如果必须的话,您可以将lombok从github中分离出来并添加它,但是我们没有关于如何做到这一点的教程,我们不推荐这样做

      除了龙目山(这是很棘手的),这是一个直接的-不可能的-不幸的