在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();
答案 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是强类型的,并没有推断输入。另一个答案可以解决您的问题,但是对于您的另一个问题,遗憾的是,您无法让编译器推断出变量的类型。