java - Java注解创建构造函数
问题描述
我正在PageFactory
为我的自动化框架使用页面对象模型。现在对于每个页面类,我必须创建一个构造函数。例如:
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
}
我已经完成了 tuts,但不明白我将如何实现它?
解决方案
你基本上不能。注释 API 仅提供两个原语:
让注释是运行时可检查的。如果您想编写一个工具,例如,接受某个类的实例并使用在该类的字段上编写的注释作为将该实例序列化为 XML 或 JSON blob 的指导,那么这非常有用。对于这个用例,它绝对没有任何作用;您不能只在运行时向事物添加构造函数并使其有用(因此构造函数在编译时不存在,这显然是您想要它们的时候)。
将注释处理器插入编译过程,它可以看到它们。但是,通过 API 开箱即用,注释处理器可以生成新文件;它不能修改现有的。因此,它也不能添加该构造函数。
还有第三种选择:Project Lombok,它使用注释并且可以在现有文件中即时生成代码。但这是火箭科学——我们(我是核心贡献者之一)为各种编译器编写自定义代码,并做了一些几乎没有(直接取消)支持的恶作剧以及大量维护工作以确保一切正常。
对于我们没有有意义的支持的自定义、只为您的项目和没有其他人的龙目岛添加来说,这听起来像是一项很好的任务。你当然可以从 github 上 fork lombok 并在必要时添加它,但是我们没有关于如何做到这一点的教程,我们不推荐它。
不幸的是,除了龙目岛(这很棘手)之外,这是一个直截了当的-不可能-。
推荐阅读
- html - 如何使用css为段落中的每一行文本放置行分隔符?
- python - 处理带有分区的pyspark中的嵌套json文件
- docker - Docker:有效地将镜像迁移到另一个注册表
- mongodb - MongoDB Compass - 永久删除文档
- tableau-api - Tableau 不读取 Databricks 库中的 hive-serde jar
- sql - SQL IN() 运算符可以以更有效的方式堆叠吗?
- java - Spring WebFlux 中的 SecurityContext 始终为空
- rust - 如何使用 serde 将 Rust 对象序列化为 Rust 文字?
- mysql - 如何将 SQL 查询与另一个表链接?
- ios - 以由 firebase 引起的 NSException 类型的未捕获异常终止