C#var类型的Java替代代码

时间:2015-12-22 04:47:56

标签: java selenium

在C#中,隐式类型的局部变量是强类型的,就像您自己声明了类型一样,但编译器确定了类型。但在Java中,我们需要明确设置数据类型。如何在Java中编写以下代码

以下代码:

put

相信,我们需要将其设置为数组类型,但我正在努力编写这段代码

在C#中

var newPostlink = message.findElement(By.tagName("a"))[0];

在Java中:

public static void GoToNewPost() {
var message = Driver.getWebDriver().findElement(By.id("message"));
var newPostlink = message.findElement(By.tagName("a"))[0];
newPostlink.click();

4 个答案:

答案 0 :(得分:1)

??? newPostlink = message.findElement(By.tagName("a"))[0];

您在此处调用findElement类型对象上的方法WebElement。根据文档,此方法返回类型WebElement

  

WebElement findElement(By by)

     

使用给定方法查找第一个WebElement。

这是一个单个对象,而不是一个数组,因此您不能在Java中使用数组索引操作符,因此您不能将[0]置于其后面。

查看C#文档,情况完全相同。因此,最可能的答案是:您发布了错误的代码,而您实际上是想在该行中调用findElements(复数)。

在这种情况下,Java版本返回List<WebElement>,您可以像这样得到元素零:

WebElement newPostlink = message.findElements(By.tagName("a")).get(0);

但这有点无意义,因为这正是findElement方法已经完成的事情:它返回找到的第一个元素。

所以你真正想要的是摆脱[0],然后使用WebElement作为newPostlink的类型:

WebElement newPostlink = message.findElement(By.tagName("a"));

答案 1 :(得分:1)

我刚刚找到了Lombok val type,它几​​乎与C#var关键字完全相同,只是它也被声明为final(就像C#的readonly

答案 2 :(得分:0)

从Java 10开始,实际上存在局部变量的类型推断,请参阅JEP-286

你可以写:

var user = new User();

但是,您只能将它用于for和for-each循环中的局部变量和变量。没有字段或方法返回值。

另一个限制是,您可以立即为变量赋值,但这不起作用:

var user;
user = new User();

你不能指定null。请注意,它仍然是静态类型,编译器只是在编译时推断类型,结果字节码确实包含类型信息,就像您明确声明类型一样。这意味着性能不受影响,因为在运行时没有额外的处理。

您可以下载JDK 10 Early Access build here

有关详细信息,请参阅this blog post我写的。

答案 3 :(得分:-1)

Java是强类型的,并没有推断输入。另一个答案可以解决您的问题,但是对于您的另一个问题,遗憾的是,您无法让编译器推断出变量的类型。