如何将枚举值作为参数传递给代码模型中的调用?

How can I pass enum values as an argument to an invoke in codemodel?

我正在尝试创建一个 JInvocation,例如:-

driver.manage().timeouts().implicitlyWait(10L, (TimeUnit.SECONDS));

这是我用来生成相同代码的代码块:-

public static JInvocation implicitWait(JVar driverJVar, Long implicitWaitTime, TimeUnit timeUnit) {
    JClass timeUnitType = (JClass) BasicUtility.getReferenceForClass(TimeUnit.class);
    JExpression jExpression = JExpr.direct(timeUnitType.name().concat(".").concat(timeUnit.name()));
    return driverJVar.invoke("manage").invoke("timeouts").invoke("implicitlyWait").arg(JExpr.lit(implicitWaitTime)).arg(jExpression);
}

这非常有效,唯一的问题是 TimeUnit 不会为此创建导入语句。我必须手动放置它。有没有其他方法可以使用枚举值并作为参数传递?

找到了解决办法。我们可以使用 JClass 的 staticRef 方法来完成。这将自动引入导入语句。

JClass timeUnitType = (JClass) CodeModelUtility.getReferenceForClass(TimeUnit.class);
return driverJVar.invoke("manage").invoke("timeouts").invoke("implicitlyWait").arg(JExpr.lit(implicitWaitTime)).arg(timeUnitType.staticRef(timeUnit.name()));