我正在使用一个库 - HtmlUnit - 并且我刚刚从版本 2.4 更新到版本 2.5。当我针对 2.5 编译代码时,我收到一条我不熟悉的奇怪对象“无法取消引用”错误消息。此外,我不明白为什么当我用两行编写代码时它可以工作,但当我将其作为一行代码编写时却失败。
这是代码:
//this compiles fine
HtmlInput usernameInput = form.getInputByName("username");
usernameInput.setValueAttribute(userName);
//this fails to compile
form.getInputByName("password").setValueAttribute(passWord);
这是我使用 ANT 和 Java 1.6 编译时收到的错误消息:
[javac] E:\workspaces\europa\PortalTestSuite\src\com\carefirst\portal\test\controller\EAITest.java:32: com.gargoylesoftware.htmlunit.html.HtmlInput cannot be dereferenced
[javac] form.getInputByName("password").setValueAttribute(passWord);
[javac] ^
com.gargoylesoftware.htmlunit.html.HtmlInput 无法取消引用?我见过自动装箱的取消引用问题,但对象没有。在这种情况下这意味着什么?为什么代码以一种方式工作而不是以另一种方式工作?
最佳答案
事实上,这是另一个问题。
API 是 public final <I extends HtmlInput> I getInputByName(String name) throws ElementNotFoundException
.
这意味着该方法返回 I
的实例(I extends HtmlInput
)。
当你写下:
HtmlInput usernameInput = form.getInputByName("username");
-> 类 I 隐式是一个 HtmlInput。
但是当你写:
form.getInputByName("password").setValueAttribute(passWord);
-> 无法明确找到 I 类。
如果你想让它工作,你必须写:
form.<HtmlInput>getInputByName("password").setValueAttribute(passWord);
-> 这迫使 I 成为 HtmlInput。
诚挚地, 杰罗姆。
关于Java对象 "cannot be dereferenced",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/749394/