我正在使用一个库 - 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无法解除引用?我已经看到了Autoboxing的derefernce问题,但没有看到对象。在这种情况下它意味着什么?为什么代码以一种方式而不是另一种方式工作?
答案 0 :(得分:5)
事实上,这是另一个问题。
API为public final <I extends HtmlInput> I getInputByName(String name) throws ElementNotFoundException
。
这意味着该方法返回I
(I extends HtmlInput
)的实例。
当你写:
HtmlInput usernameInput = form.getInputByName("username");
- &GT;类I隐含地是HtmlInput。
但是当你写:
form.getInputByName("password").setValueAttribute(passWord);
- &GT;我无法明确找到第一类。
如果你想要它可以工作,你必须写:
form.<HtmlInput>getInputByName("password").setValueAttribute(passWord);
- &GT;这迫使我成为HtmlInput。
亲切, 杰罗姆。
答案 1 :(得分:3)