首页 > 解决方案 > 如何将枚举值作为参数传递给代码模型中的调用?

问题描述

我正在尝试创建一个 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 没有为此创建导入语句。我必须手动放置。有没有其他方法可以使用枚举值并作为参数传递?

标签: sun-codemodel

解决方案


找到了解决方案。我们可以使用staticRefJClass 的方法来做到这一点。这将自动带来导入语句。

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

推荐阅读